中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

如何使用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

华阴市| 东阿县| 甘洛县| 紫金县| 陆良县| 天等县| 含山县| 乐业县| 洞口县| 紫金县| 祁连县| 宁陵县| 潍坊市| 定边县| 和顺县| 弥渡县| 佛学| 铅山县| 宜兰县| 台州市| 元阳县| 秀山| 东乡| 津南区| 安平县| 泰宁县| 新乡市| 苍山县| 罗山县| 浙江省| 高清| 册亨县| 鄢陵县| 双城市| 兴海县| 景德镇市| 射阳县| 拉萨市| 古田县| 富民县| 阿图什市|