服务器

  1. 创建一个服务器代理类TCPServer,其中有init、accept、handle、close函数。
  2. 在初始化函数中创建socket对象,绑定主机的地址和端口,并将socket变为一个监听套接字。
  3. accept函数将阻塞工作线程等待客户端的连接(如果你的主线程中还有其他业务逻辑,可以将这个放在子线程中),每拿到一个连接就可以获取到与该客户端的通信套接字,并开辟一个子线程,处理该套接字的业务。
  4. handle函数就是为每个客户端sockat开辟的线程函数,该函数也会阻塞等待客户端发送数据(当然你也可以使用这个socket对象主动向客户端发送数据)。这里有个机制就是当客户端发送一个空数据就说明与客户端的连接断开了,这个空数据不是空格等没有文本的空。
  5. close函数中就是关闭TCP服务器的事情了。
import socket
import threadingfrom org.venus.ocr.src.util import ipUtilsclass TCPServer(object):def __init__(self, port, maxConn):# 创建TCP服务器self.tcpServer = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 解决程序端口占用问题self.tcpServer.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)# 绑定本地ip地址和端口self.tcpServer.bind(("", port))# 将套接字变为监听套接字,并设置最大连接数量self.tcpServer.listen(maxConn)serverIp = ipUtils.getIp()print("开启TCP服务器:({0}:{1})".format(serverIp,self.tcpServer.getsockname()[1]))def accept(self, readBufSize, coding):# 工作线程,等待客户端连接while True:# 等待设备连接(通过ip地址和端口建立tcp连接)# 如果有设备连接,则会生成用于设备和服务器通讯的套接字:socketsocket, addr = self.tcpServer.accept()# 会获取到设备的ip地址和端口print("客户端{0}已连接".format(addr))# 创建线程处理该连接的业务handle = threading.Thread(target=self.handle, args=(socket, addr, readBufSize, coding))handle.start()def handle(self, socket, addr, readBufSize, coding):# 客户端业务线程,处理该客户端的通信数据while True:# 接收客户端发送的数据,单次最大1024字节,按utf-8格式解码data = socket.recv(readBufSize).decode(coding)# 如果设备发送的数据不为空if data:print("收到客户端{0}的数据:".format(addr), data)response = "收到你的数据:" + data# 返回客户端数据socket.send(response.encode(coding))# 如果收到空的数据,说明客户端断开连接else:print('客户端{0}断开连接'.format(addr))break# 关闭套接字socket.close()def close(self):print("关闭TCP服务器")self.tcpServer.close()passdef run(port):serverIp = ipUtils.getIp()if not serverIp:print("主机没有网络连接")returntcpServer = TCPServer(port, 1000)tcpServer.accept(1024, "utf-8")# 线程会阻塞在accept函数tcpServer.close()if __name__ == '__main__':run(1991)

客户端

  1. 创建socket对象,并通过服务器地址和端口连接到服务器中。
  2. 使用socket对象可以向服务器发送数据和接收数据

这里的测试代码非常简单,就是发送和接收一些数据后就关掉了,在业务中应该是在子线程中使用socket对象一直要接收数据的,并且你也应该手持这个socket对象随时想服务器发送数据,那就是根据业务编码了。

import socketdef run(ip, port, coding, readBufSize):# 建立一个socket对象client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 连接服务器client.connect((ip, port))# 定义一个控制变量,这个逻辑仅调试,与业务无关count = 0while count < 10:#使用socket对象向服务器发送数据sendMsg = "我是Python client 发送的数据" + str(count)client.send(sendMsg.encode(coding))#接收服务器响应的数据,如果有的话,因为这里会阻塞responseMsg = client.recv(readBufSize).decode(coding)print("收到服务器返回的数据:", responseMsg)count += 1client.close()if __name__ == '__main__':serverIp = "172.20.10.3"serverPort = 1991run(serverIp, serverPort, "utf-8", 1024)

http://www.taodudu.cc/news/show-4603611.html

相关文章:

  • 程序猿终级课颈椎腰椎锻炼
  • 2022-06-29 银河麒麟V10 Nginx-rtmp+FFmpeg流媒体服务器环境搭建
  • 程序员必备:拯救颈椎,只需三个步骤
  • 颈椎不太好适合学计算机那,拒绝颈椎病 挑选人体工学电脑桌椅看这几点
  • 学计算机颈椎,电脑对我们的颈椎有多大危害?
  • 健康闹钟+颈椎操,保护你的颈椎
  • 学计算机颈椎痛,有效缓解颈椎疼痛的七个简单动作及附图 (电脑族必备)
  • 数字人民币跟第三方支付的区别
  • 牛客网华为机试2
  • 数字人民币概论、特征、架构介绍
  • 区间dp——合并金币
  • 牛客网 - [牛客假日团队赛5]金币馅饼(dp)
  • 魔法币问题
  • 【牛客网OJ题】人民币转换
  • 计蒜客 - 硬币翻转
  • 【牛客网】魔法币
  • h5调用android录音,html5网页录音插件Recorder
  • macbook环境下从iphone微信中导出语音文件
  • 微信小程序+.NET(十五) 小程序录音无法播放
  • java 微信服务器录音下载到自己服务器,并转为wav格式
  • python输出字符的ascii码_如何获取一个字符的ASCII码
  • 【实践】python 机器码 实现一机一码
  • TYPE1码本 一【5G笔记】
  • 租赁合同甲方违约怎么办
  • wps总是显示服务器错误,wps表格打开遇到错误的解决方法步骤
  • wps多人协作后怎么保存_wps在线协作,多人实时填表,数据统计方法
  • 可以完美在 wps中使用zotero的方法
  • 文件在线预览功能(office文件)
  • WPS在线预览,无需安装任何浏览器插件
  • PPT模版

2022-07-11 Python TCP服务器与客户端相关推荐

  1. python应用系列教程——python使用socket创建tcp服务器和客户端

    全栈工程师开发手册 (作者:栾鹏) python教程全解 python使用socket创建tcp服务器和客户端. 服务器端为一个时间戳服务器,在接收到客户端发来的数据后,自动回复. 客户端,等待用户输 ...

  2. 基于Python Tkiner、thread与socket实现的简单多人聊天室,在Python中创建TCP服务器与客户端进行通信

    基于Python Tkiner.thread与socket实现的简单多人聊天室,在Python中创建TCP服务器与客户端进行通信 完整代码下载地址:基于Python Tkiner.thread与soc ...

  3. python TCP服务器v1.8 - PyQt5登录界面美化+淡入淡出

    TCP聊天服务器套接字v1.8 所有版本记录: v1.0 : TCP聊天服务器套接字|PyQt5+socket(TCP端口映射+端口放行)+logging+Thread(含日志,html)+anaco ...

  4. Python TCP服务器v1.7 - PyQt5 server服务端来临

    TCP聊天服务器套接字v1.7 所有版本记录: v1.0 : TCP聊天服务器套接字|PyQt5+socket(TCP端口映射+端口放行)+logging+Thread(含日志,html)+anaco ...

  5. TCP服务器和客户端的链接例子(侧重点在注意关闭套接子,减少套接子的描述子)

    TCP服务器和客户端的链接例子(侧重点在注意关闭套接子,减少套接子的描述子) 每个文件或套接口都有一个访问计数,该访问计数在文件表项中维护,它表示当前指向该文件或套接口的打开的描述字个数. 每个文件, ...

  6. 服务器主动发送fin信号,tcp 服务器向客户端发送FIN

    tcp 服务器向客户端发送FIN 内容精选 换一换 ELB的常见异常返回码有400.403.502.504等.若遇到这些返回码建议您先直接访问后端云服务器,查看是否是后端云服务器的异常.若后端云服务器 ...

  7. Qt 零基础设计实现TCP服务器和客户端上位机(零基础实战详解,附源码文件)

    文章目录 TCP和UDP TCP的三次握手和四次分手 TCP和UDP的区别 关于Socket(套接字) Qt TCP服务器的设计与实现 使用Qt的 帮助 TCP服务器和客户端 区别 UI界面设计和原则 ...

  8. 【TCP服务器和客户端的简单编写】

    TCP服务器和客户端的简单编写 TCP简介 TCP是什么 传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IE ...

  9. python tcp服务器_python实现TCP服务器端与客户端的方法详解

    本文实例讲述了python实现TCP服务器端与客户端的方法.分享给大家供大家参考.具体如下: TCP服务器程序(tsTserv.py): from socket import * from time ...

最新文章

  1. java与fabric区块链--fabric-ca-server 注册---(3)
  2. linux内核网络协议栈--br_pass_frame_up和br_forward(二十九)
  3. .NET六大剑客:栈、堆、值类型、引用类型、装箱和拆箱
  4. d3js mysql_D3.js入门指南
  5. 计算机组成原理(二)数据的表示和运算
  6. 在大公司天天调参数,感觉快废了~
  7. 原子哥家的 SIM800L透传模式配置
  8. oracle+soacs,第 3 章 使用 C++ 编译器选项
  9. 标准盒子模型简单讲解
  10. 杰理之高低速(HSB/LSB)时钟硬件模块【篇】
  11. Webservice-2
  12. 知识共享协议促进微积分的大发展
  13. 关于会员积分体系的产品设计
  14. php srt,常见字幕文件格式(lrc、srt、ass)的区别以及互相转换的方法
  15. android自适应屏幕翻转,Android中正确自适应屏幕翻转
  16. 推荐 8 个优质的公众号
  17. 问题:npm如何设置仓库地址?
  18. jQuery Datepicker 日期插件
  19. python爬取微博数据出现的问题
  20. “全国十大热门上班路”出炉,北京西二旗、后厂村路热度最高

热门文章

  1. ROS古月资料学习之ROS简介
  2. 微服务 - Hystrix 熔断器
  3. nginx的重试机制
  4. RC上电复位时间计算
  5. AIX文件系统扩容和切换启动盘
  6. 嫦娥二号没有拍到美国登月痕迹
  7. Git基础(21):GitLab创建组、用户、项目
  8. Flash/Photoshop/AE/图形图像资源下载地址
  9. 自己学习c++过程中写下的笔记,只做基础了解使用
  10. dxf文件解析,g代码解析,图片解析C#工程文件