Python—網絡通信編程之tcp非阻塞通信(socketserver)


服務端代碼

import socketserver

# 定義一個類
class MyServer(socketserver.BaseRequestHandler):
    # 如果handle方法出現報錯,則會進行跳過.但是setup方法和finish方法無論如何都會進行執行的.
    def setup(self):
        print("首先執行setup")	
    
    def handle(self):
        print("然后執行handle")	
        conn = self.request                         # 定義連接變量
        conn.send(("連接成功,客戶端端口:%s" % (conn.getpeername()[1])).encode())   # 向客戶端發送消息
        while True:
            data = conn.recv(1024)                  # 接收客戶端消息
            print(data.decode())
            if not data or data == b'exit':
                break
            conn.send(data)
        conn.close()
    		
    def finish(self):
        print("最后執行finish")	
    
if __name__ == "__main__":
	# 創建多線程實例
	server = socketserver.ThreadingTCPServer(("127.0.0.1", 3120) ,MyServer)
	# 開啟異步多線程,等待連接
	server.serve_forever()

客戶端代碼

import socket

client = socket.socket()
client.connect(("127.0.0.1", 3120))
 
while True:     
    data = client.recv(1024)  
    print(data.decode())     
    msg = input("請輸入要發送的信息...")
    client.send(msg.encode())
    if not msg or msg == "exit":
        break
     
client.close()

為什么是非阻塞通信呢?

原來的tcp通信只能跟一個客戶端連接,當另一個客戶端來連接的時候,就會阻塞連接不上。socketserver模塊采用的就是多線程。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM