Python socket編程客戶端與服務端通信
阿新 • • 發佈:2017-05-22
eve sock 系統 con conn 綁定 idt 註意 服務
[本文出自天外歸雲的博客園]
目標:實現客戶端與服務端的socket通信,消息傳輸。
客戶端
客戶端代碼:
from socket import socket,AF_INET,SOCK_STREAM #服務端的ip地址 server_ip = ‘127.0.0.1‘ #服務端socket綁定的端口號 server_port = 20000 if __name__ == ‘__main__‘: while True: str_msg = input("請輸入要發送信息:") if str_msg != "": bytes_msg= bytes(str_msg, encoding = "gbk") client = socket(AF_INET,SOCK_STREAM) client.connect((server_ip,server_port)) client.send(bytes_msg) print(str(client.recv(8192),encoding="gbk")) client.close()
客戶端(Mac系統)運行截圖:
服務端
服務端代碼:
fromsocketserver import BaseRequestHandler, TCPServer #指定接收消息的客戶端ip列表 target_clients = ["10.235.0.109"] class EchoHandler(BaseRequestHandler): def handle(self): for target_client in target_clients: if target_client in self.client_address: print(‘Got connection from‘, self.client_address) msg = self.request.recv(8192) if not msg: break ret_msg = bytes("自動回復:消息已收到!", encoding = "gbk") self.request.send(ret_msg) print(str(msg, encoding = "gbk")) break if __name__ == ‘__main__‘: from threading import Thread NWORKERS = 16 #綁定socket服務端所在ip和端口號 serv = TCPServer((‘‘, 20000), EchoHandler) for n in range(NWORKERS): t = Thread(target=serv.serve_forever) t.daemon = True t.start() serv.serve_forever()
服務端(Windows系統)運行截圖,註意要設置cmd活動頁代碼為936(chcp 936)方可顯示中文,設置cmd屬性中的字體為點陣字體:
參考資料:Python3-cookbook 11.2 創建TCP服務器
Python socket編程客戶端與服務端通信