欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實現(xiàn)socket非阻塞通訊功能示例

 更新時間:2019年11月06日 11:48:12   作者:weixin_42359464  
這篇文章主要介紹了Python實現(xiàn)socket非阻塞通訊功能,結合實例形式分析了Python使用socket模塊進行非阻塞通訊的原理、多線程及客戶端、服務器端相關實現(xiàn)技巧,需要的朋友可以參考下

本文實例講述了Python實現(xiàn)socket非阻塞通訊功能。分享給大家供大家參考,具體如下:

非阻塞需要多線程編程

服務端

方式1: 使用threading庫實現(xiàn)多線程

基本方法和單進程基本寫法一致, 將收發(fā)部分封裝為函數(shù)以便開啟其他線程:

import socket
import time
import threading
def handle_socket(conn, addr):
  while True:
    data = conn.recv(1024)
    print(data.decode('utf-8'))
    time.sleep(3)
    send_data = 'got it'
    conn.send(send_data.encode('utf-8'))
  conn.close()

基本設置和調用部分: 綁定, 監(jiān)聽, 接受連接:

if __name__ == '__main__':
  s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  s.bind(('0.0.0.0', 8888))
  s.listen()
  while True:
    conn, addr = s.accept()
    client_thread = threading.Thread(target=handle_socket, args=[conn, addr])
    client_thread.start()

方式2: 通過繼承StreamRequestHandler庫實現(xiàn)多線程

收發(fā)部分寫到handle方法中:

import socketserver
from socketserver import StreamRequestHandler
import time
class MyHandler(StreamRequestHandler):
  def handle(self):
    # addr = self.request.getpeername()
    # print('get connection from ', addr)
    # self.wfile.write('hello, thank for your connection'.encode())
    while True:
      datarecv = self.request.recv(1024)
      if not datarecv:
        break
      time.sleep(3)
      print(datarecv.decode())
      self.request.send("got it".encode())

開啟

myserver = socketserver.ThreadingTCPServer(('127.0.0.1', 8888), MyHandler)
myserver.serve_forever()

客戶端

客戶端:

import socket
conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
conn.connect(('127.0.0.1', 8888))
while True:
  conn.send('hello'.encode())
  data = conn.recv(1024)
  print(data.decode())

更多關于Python相關內容可查看本站專題:《Python Socket編程技巧總結》、《Python數(shù)據結構與算法教程》、《Python函數(shù)使用技巧總結》、《Python字符串操作技巧匯總》、《Python入門與進階經典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對大家Python程序設計有所幫助。

相關文章

最新評論