socket 客户端和服务端思考
accept :连接一个客户端:连接对象, 地址
这个连接断开之前,别的连接是不受理的。如果客户端断开,会报错,因为连接突然没了。
所以,客户端会使用随机端口,但是端口会用完。因为端口不会立即释放。跟系统设置有关,一般的业务应该没有问题,自动释放,是可以接受的。
不对的 !!!:一个端口只用一次。
不对的 !!!:所以,用 bind 固定客户端端口。服务端异常处理。每个服务分配一个端口,软件运行中不关闭连接。
服务端应该使用 内置模块 serversocket,并发服务器。
socket 客户端不允许发送 空字符串,会夯住
socket 服务端,当接受字符串为:0,客户端断开了连接
socket server
import socket
import socketserver
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(('127.0.0.1',5555))
s.listen(5)
cs,address=s.accept() #让服务器可以在close之后接收其他客户端的连接请求
while True:
data = cs.recv(1024)
cs.send(b'OK hello world!')
s.close()
socket client
'''socket测试客户端'''
import socket
plc_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
plc_socket.bind(('127.0.0.1',5001))
plc_socket.connect((plc_ip, plc_port))
while 1:
try:
plc_socket.send(send_data.encode('utf-8'))
recv_data = plc_socket.recv(1024)
except OSError:
logging.exception('oserror')
plc_socket.close()
socketserver
'''socket测试服务端'''
import socketserver
class SockeListenServer(socketserver.BaseRequestHandler):
def handle(self):
while True:
try:
data = self.request.recv(1024)
self.request.send(b'OK zzz\r\n')
print("客户端%s发来的消息:%s"%(self.client_address,data.decode('utf-8')))
except Exception as e:
print(e)
break
self.request.close()
# 关闭服务(可选操作)
self.server.shutdown()
# phone.close()
server = socketserver.ThreadingTCPServer(('127.0.0.1',8501),SockeListenServer)
server.serve_forever()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2020-08-26 导出项目环境 requiredments
2020-08-26 Flask——路由正则,Request方法,Response方法,cookies,session,闪现,请求扩展