Python实现套接字非阻塞通讯功能示例

  

本文实例讲述了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实现套接字非阻塞通讯功能示例