Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】


Posted in Python onOctober 12, 2019

本文实例讲述了Python 网络编程之TCP客户端/服务端功能。分享给大家供大家参考,具体如下:

demo.py(TCP客户端):

import socket
def main():
  # 1. 创建tcp的套接字
  tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  # 2. 链接服务器
  # tcp_socket.connect(("192.168.33.11", 7890))
  server_ip = input("请输入要链接的服务器的ip:")
  server_port = int(input("请输入要链接的服务器的port:"))
  server_addr = (server_ip, server_port)
  tcp_socket.connect(server_addr)
  # 3. 发送数据/接收数据
  send_data = input("请输入要发送的数据:")
  tcp_socket.send(send_data.encode("utf-8"))
  # 接收数据。 会阻塞代码,直到接收到数据
  recv_data = tcp_socket.recv(1024) # 1024表示本次接收的最大字节数。
  print(recv_data.decode("utf-8"))
  # 4. 关闭套接字
  tcp_socket.close()
if __name__ == "__main__":
  main()

demo.py(TCP服务端):

import socket
def main():
  # 1. 创建套接字 socket
  tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  # 设置当服务器先close 即服务器端4次挥手之后资源能够立即释放,这样就保证了,下次运行程序时 可以立即绑定7890端口 (如果服务端先close,再启动服务端就不会报端口被占用的错误。)
  tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  # 2. 绑定本机ip和端口号 bind
  tcp_server_socket.bind(("", 7890))
  # 3. 监听客户端的链接请求 listen (由主动去链接服务器,变成被客户端链接)
  tcp_server_socket.listen(128) # 128影响链接客户端的数量(并发量)(和操作系统也有关)
  # 4. 接受客户端的链接 accept。 会阻塞代码,直到有客户端链接
  new_client_socket, client_addr = tcp_server_socket.accept()
  print(client_addr) # ("192.168.33.109",53766) 客户端的ip和端口
  # 接收客户端发送过来的数据。 会阻塞代码,直到接收到数据
  recv_data = new_client_socket.recv(1024) # 1024表示本次接收的最大字节数。
  print(recv_data.decode("utf-8")) # 如果recv_data为空,表示客户端断开链接
  # 写数据给客户端
  new_client_socket.send("hahahghai-----ok-----".encode("utf-8"))
  # 关闭套接字
  new_client_socket.close() # 与客户端通信的套接字
  tcp_server_socket.close() # 服务器套接字
if __name__ == "__main__":
  main()

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
在Python的循环体中使用else语句的方法
Mar 30 Python
python基础教程之匿名函数lambda
Jan 17 Python
Python生成密码库功能示例
May 23 Python
Python基础语言学习笔记总结(精华)
Nov 14 Python
python+selenium打印当前页面的titl和url方法
Jun 22 Python
PyCharm 设置SciView工具窗口的方法
Jan 15 Python
值得收藏的10道python 面试题
Apr 15 Python
Python多进程方式抓取基金网站内容的方法分析
Jun 03 Python
python3.7将代码打包成exe程序并添加图标的方法
Oct 11 Python
PyTorch实现更新部分网络,其他不更新
Dec 31 Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
Jun 27 Python
Python字符串对齐方法使用(ljust()、rjust()和center())
Apr 26 Python
Python Collatz序列实现过程解析
Oct 12 #Python
python logging日志模块原理及操作解析
Oct 12 #Python
Python爬虫之urllib基础用法教程
Oct 12 #Python
python 生成器和迭代器的原理解析
Oct 12 #Python
python 表格打印代码实例解析
Oct 12 #Python
Django+uni-app实现数据通信中的请求跨域的示例代码
Oct 12 #Python
python3.7将代码打包成exe程序并添加图标的方法
Oct 11 #Python
You might like
人大复印资料处理程序_补充篇
2006/10/09 PHP
php入门学习知识点七 PHP函数的基本应用
2011/07/14 PHP
PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法
2017/05/03 PHP
阿里云的WindowsServer2016上部署php+apache
2018/07/17 PHP
Linux下安装Memcached服务器和客户端与PHP使用示例
2019/04/15 PHP
php实现快速对二维数组某一列进行组装的方法小结
2019/12/04 PHP
用倒置滤镜把div倒置,再把table倒置。
2007/07/31 Javascript
Jquery 模拟用户点击超链接或者按钮的方法
2013/10/25 Javascript
jquery学习总结(超级详细)
2014/09/04 Javascript
JavaScript点击按钮后弹出透明浮动层的方法
2015/05/11 Javascript
easyui form validate总是返回false的原因及解决方法
2016/11/07 Javascript
jQuery checkbox选中问题之prop与attr注意点分析
2016/11/15 Javascript
JavaScript中清空数组的方法总结
2016/12/02 Javascript
使用jquery判断一个元素是否含有一个指定的类(class)实例
2017/02/12 Javascript
完美解决input[type=number]无法显示非数字字符的问题
2017/02/28 Javascript
js+html5实现侧滑页面效果
2017/07/15 Javascript
webpack打包js的方法
2018/03/12 Javascript
微信小程序车牌号码模拟键盘输入功能的实现代码
2018/11/11 Javascript
js原生map实现的方法总结
2020/01/19 Javascript
[10:07]2014DOTA2国际邀请赛 实拍选手现场观战DK对阵Titan
2014/07/12 DOTA
Windows下Python的Django框架环境部署及应用编写入门
2016/03/10 Python
说一说Python logging
2016/04/15 Python
django模板结构优化的方法
2019/02/28 Python
简单了解python代码优化小技巧
2019/07/08 Python
python实现把二维列表变为一维列表的方法分析
2019/10/08 Python
解决import tensorflow as tf 出错的原因
2020/04/16 Python
基于jupyter代码无法在pycharm中运行的解决方法
2020/04/21 Python
Python参数传递机制传值和传引用原理详解
2020/05/22 Python
Pytorch模型迁移和迁移学习,导入部分模型参数的操作
2021/03/03 Python
运动会邀请函范文
2014/01/31 职场文书
我的中国梦演讲稿1000字
2014/08/19 职场文书
天堂的孩子观后感
2015/06/11 职场文书
旅游投诉信范文
2015/07/02 职场文书
2015大学党建带团建工作总结
2015/07/23 职场文书
银行工作心得体会范文
2016/01/23 职场文书
使用@Value值注入及配置文件组件扫描
2021/07/09 Java/Android