1,設計思路2,項目介紹3,實例敘述# -*- coding:utf-8 -*-
# 導入 socket 通訊模塊 import socket # 導入時間管理模塊 import time # 導入多線程模塊 import threading
# 設置服務地址、端口 address = ("localhost", 4444)
def run(): # 創(chuàng)建服務端 socket socket_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 綁定服務地址、端口 socket_server.bind(address) # 設置監(jiān)聽最大等待數(shù)為 5 個 socket_server.listen(5) print("服務已經(jīng)啟動,正在等待客戶端連接......") while True: # 設置睡眠時間 time.sleep(0.1) # 允許客戶端連接 client, info = socket_server.accept() # 啟用新線程調(diào)用消息處理 thread = threading.Thread(target=catch_message,args=(client,info)) # 設置為守護線程 thread.setDaemon(True) # 開啟線程執(zhí)行 thread.start()
def catch_message(client, info): client.send("歡迎來到 Python 聊天室".encode('utf-8')) print("客戶端信息:" + str(info)) while True: try: # 接收客戶端消息、接收最大長度為 1024,并進行 utf-8 解碼 message = client.recv(1024).decode('utf-8') # 校驗是否關閉客戶端 if not message or 'Q' == message: print("關閉客戶端") break print("接收消息:" + message) # 將消息進行 utf-8 編碼后發(fā)給客戶端 client.send(message.encode('utf-8')) except Exception as e: # 異常處理 print(e) break
if __name__ == '__main__': # main 入口函數(shù)執(zhí)行 run()
# -*- coding:utf-8 -*-
# 導入socket 通信模塊 import socket # 導入系統(tǒng) sys 模塊 import sys
# 設置客戶端請求連接地址、端口 address = ("localhost", 4444)
def run(): try: # 創(chuàng)建客戶端 socket socket_client = socket.socket() # 連接服務端 socket_client.connect(address) # 接收服務端消息并進行 utf-8 解碼 print(socket_client.recv(1024).decode()) while True: # 允許控制臺輸入 message = input("請輸入 >>") if len(message) == 0: continue else: # 將控制臺輸入消息進行 utf-8 編碼后發(fā)送 socket_client.send(message.encode('utf-8')) # 接收服務端消息并進行 utf-8 解碼 print(socket_client.recv(1024).decode('utf-8')) # 客戶端關閉 socket_client.close() except Exception as e: # 異常 處理 print(e) sys.exit(0)
if __name__ == '__main__': # 主函數(shù)入口 run()
(1)第一步,啟動服務端 python server.py (2)第二步,啟動客戶端 python client.py (3)第三步,多個客戶端繼續(xù)啟動 python client.py 4,效果展示5,展望
|