先看服务端的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | import sys # import socket import time import gevent from gevent import socket from gevent import monkey monkey.patch_all() #类似于python中的黑魔法,把很多模块的阻塞的变成非阻塞的,比如socket中的rece和send都变 # 为不阻塞了 def server(port): s = socket.socket() s.bind(( "127.0.0.1" ,port)) s.listen( 2000 ) while True : cli,add = s.accept() gevent.spawn(handle_request,cli) #通过gevent的启动一个协程,把客户端的socket对象传进去 def handle_request(s): try : while True : data = s.recv( 1024 ) print ( "收到的信息:" , str (data,encoding = "utf-8" )) s.send(data) if not data: s.shutdown(socket.SHUT_WR) #把和客户端这个链接销毁 except Exception as ex: print (ex) finally : s.close() if __name__ = = '__main__' : server( 8000 ) |
在看客户端的代码,分别使用多线程和多进程实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | import socket import gevent import threading import multiprocessing ''' ip_bind = ("127.0.0.1",8000) c = socket.socket() c.connect(ip_bind) while True: data = input("客户端:") c.send(bytes(data,encoding="utf-8")) data = c.recv(1024) print("服务端:",str(data,encoding="utf-8")) c.close() ''' import socket import gevent ip_bind = ( "127.0.0.1" , 8000 ) c = socket.socket() c.connect(ip_bind) def f(n): while True : # c.send(bytes(n,encoding="utf-8")) data = str (n) c.send(bytes(data,encoding = "utf-8" )) data = c.recv( 1024 ) print ( "server:" , str (data,encoding = "utf-8" )) c.close() x = [] if __name__ = = '__main__' : l = [] """ 多线程实现并发客户端 for i in range(500): t = threading.Thread(target=f,args=[str(i),]) t.start() l.append(t) for t in l: t.join() """ # 多进程实现并发客户端 for i in range ( 100 ): p = multiprocessing.Process(target = f,args = [i,]) p.start() l.append(p) for p in l: p.join() |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本