本文实例讲述了Python实现套接字非阻塞通讯功能。分享给大家供大家参考,具体如下:
非阻塞需要多线程编程
<强>方式1:使用线程库实现多线程强>
基本方法和单进程基本写法一致,将收发部分封装为函数以便开启其他线程:
进口套接字 导入的时间 进口线程 康涅狄格州def handle_socket (addr): 而真正的: data=https://www.yisu.com/zixun/conn.recv (1024) print (data.decode (utf - 8)) time . sleep (3) send_data=' https://www.yisu.com/zixun/got它' conn.send (send_data.encode (utf - 8)) conn.close () >之前基本设置和调用部分:绑定,监听,接受连接:
if __name__==癬_main__”: s=socket.socket(套接字。AF_INET socket.SOCK_STREAM) s.bind ((0.0.0.0, 8888)) s.listen () 而真正的: 康涅狄格州,addr=s.accept () client_thread=线程。线程(目标=handle_socket args=[康涅狄格州,addr]) client_thread.start () >之前<强>方式2:通过继承StreamRequestHandler库实现多线程强>
收发部分写到处理方法中:
进口socketserver 从socketserver进口StreamRequestHandler 导入的时间 类MyHandler (StreamRequestHandler): def处理(自我): # addr=self.request.getpeername () #打印(addr得到连接的) # self.wfile。写(“你好,感谢您的连接”.encode ()) 而真正的: datarecv=self.request.recv (1024) 如果不是datarecv: 打破 time . sleep (3) print (datarecv.decode ()) self.request。发送(“是”.encode ()) >之前开启
myserver=socketserver.ThreadingTCPServer (MyHandler) (127.0.0.1, 8888), myserver.serve_forever ()
客户端:
进口套接字 康涅狄格州=socket.socket(插座。AF_INET socket.SOCK_STREAM) conn.connect ((127.0.0.1, 8888)) 而真正的: conn.send('你好' .encode ()) data=https://www.yisu.com/zixun/conn.recv (1024) print (data.decode ()) >之前更多关于Python相关内容可查看本站专题:《Python套接字编程技巧总结》,《Python数据结构与算法教程》、《Python函数使用技巧总结》,《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
Python实现套接字非阻塞通讯功能示例