将socket通信实现多进程
我们知道,使用TCP协议需要提前建立连接,这样就只能一对一的传输,但是这样感觉十分单一,如果实现一个服务器能同时和多个客户端同信了?
这里就需要用到多线程。
处理的不同之处就在于:每一个接进来的客户都会创建一个新的进程,这样就能够做到互不干扰
#服务端 from socket import * from multiprocessing import Process #导入模块 server = socket(AF_INET,SOCK_STREAM) server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) server.bind(('127.0.0.1',8130)) server.listen(5) def func(conn,addr): while True: try: ret = conn.recv(1024) if not ret:break #liunx下防止客户端断掉之后依旧发送空值 print(ret.decode('utf-8')) conn.send(ret.upper()) except ConnectionResetError: break if __name__ == "__main__": while True: conn,addr = server.accept() #接进来一个,创建一个子进程 print("收到来自%s的访问,端口号为%s"% (addr[0],addr[1])) p = Process(target = func,args = (conn,addr)) p.start()
客户端(基本没有变化):
#客户端 from socket import * client = socket(AF_INET,SOCK_STREAM) client.connect(('127.0.0.1',8130)) while True: data = input(">>>").strip() if len(data) == 0:continue client.send(data.encode('utf-8')) ret = client.recv(1024) print(ret.decode('utf-8'))
结果:
收到来自127.0.0.1的访问,端口号为56225 rtyu 收到来自127.0.0.1的访问,端口号为56226 fghjk
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理