亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用python中socketserver

發布時間:2020-08-04 14:58:24 來源:億速云 閱讀:176 作者:小豬 欄目:開發技術

這篇文章主要為大家展示了如何使用python中socketserver,內容簡而易懂,希望大家可以學習一下,學習完之后肯定會有收獲的,下面讓小編帶大家一起來看看吧。

socketserver的介紹:

  • socketserver是標準庫中的一個高級模塊
  • socketserver可以簡化創建客戶端跟創建服務端的代碼

socketserver的使用:

  • 首先導入模塊:import socketserver
  • 初始化控制器類Handler【Handler是一個繼承BaseRequestHandler的類Handler中的handle方法決定了每一個連接過來的操作】 【控制器類的類名可以是其他的,不一定是Handler,只要繼承了BaseRequestHandler就行】
    • init():初始化控制設置,初始化連接套接字,地址,處理實例等信息
    • handle(): 定義了如何處理每一個連接。
    • setup(): 在handle()之前執行.一般用作設置默認之外的連接配置
    • finish():在handle()之后執行。
    • 變量:
      • self.request屬性是套接字對象,所以使用self.request.xxxx調用套接字的函數
      • self.server包含調用處理程序的實例
      • self.client_address是客戶端地址信息
  • 定義服務端類型【將Handler類和服務端的地址端口參數傳入】:
    • TCPServer 支持ipv4的TCP協議的服務器
      • server=socketserver.TCPServer((HOST,PORT),Handler)【Handler】
    • UDPServer 支持ipv4的UDP協議的服務器。
      • server=socketserver.UDPServer((HOST,PORT),Handler)
  • 運行服務端
    • 持續循環運行:serve_forever(),即使一個連接報錯了,但不會導致程序停止,而是會持續運行,與其他客戶端通信
      • server.serve_forever()
      • 如何使用python中socketserver
    • 停止server_forever:shutdown()
      • server.shutdown()

服務端:

import socketserver

class MyTCPHandler(socketserver.BaseRequestHandler):
 def handle(self):
  try:
   while True:
    self.data=self.request.recv(1024)
    print("{} send:".format(self.client_address),self.data)
    if not self.data:
     print("connection lost")
     break
    self.request.sendall(self.data.upper())
  except Exception as e:
   print(self.client_address,"連接斷開")
  finally:
   self.request.close()
 def setup(self):
  print("before handle,連接建立:",self.client_address)
 def finish(self):
  print("finish run after handle")

if __name__=="__main__":
 HOST,PORT = "localhost",9999
 server=socketserver.TCPServer((HOST,PORT),MyTCPHandler)

 server.serve_forever()

客戶端:

import socket

client=socket.socket()

client.connect(('localhost',9999))
while True:
 cmd=input("(quit退出)>>").strip()
 if len(cmd)==0:
  continue
 if cmd=="quit":
  break
 client.send(cmd.encode())
 cmd_res=client.recv(1024)
 print(cmd_res.decode())

client.close()

socketserver的異步服務端:

多線程:ThreadingTCPServer

多進程:ForkingTCPServer(Unix)

多線程版:

import socketserver

class MyTCPHandler(socketserver.BaseRequestHandler):
 def handle(self):
  try:
   while True:
    self.data=self.request.recv(1024)
    print("{} send:".format(self.client_address),self.data)
    if not self.data:
     print("connection lost")
     break
    self.request.sendall(self.data.upper())
  except Exception as e:
   print(self.client_address,"連接斷開")
  finally:
   self.request.close()
 def setup(self):
  print("before handle,連接建立:",self.client_address)
 def finish(self):
  print("finish run after handle")


HOST,PORT = "localhost",9999

server=socketserver.ThreadingTCPServer((HOST,PORT),MyTCPHandler)#多線程版
server.serve_forever()

以上就是關于如何使用python中socketserver的內容,如果你們有學習到知識或者技能,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

汽车| 涟水县| 静乐县| 清镇市| 富源县| 虞城县| 南汇区| 通江县| 中江县| 霸州市| 云和县| 庄河市| 福泉市| 晋宁县| 白玉县| 峨山| 喀喇沁旗| 漠河县| 小金县| 浦北县| 樟树市| 德保县| 堆龙德庆县| 阿克苏市| 来安县| 会宁县| 西贡区| 宁化县| 清徐县| 资源县| 苗栗市| 海兴县| 澳门| 陇川县| 尉犁县| 嘉黎县| 资源县| 肇源县| 衡阳县| 建昌县| 大同市|