python網路聊天器多執行緒版
阿新 • • 發佈:2018-12-14
在之前的一篇文章(python網路程式設計-udp)中實現了一個簡單的udp聊天器,只能在單執行緒下進行收發資料,在學習完多執行緒之後,實現一個能同時收發資料的udp聊天器。
說明:
- 編寫一個有2個執行緒的程式
- 執行緒1用來接收資料然後顯示
- 執行緒2用來檢測鍵盤資料然後通過udp傳送資料
要求:
- 實現上述要求
- 總結多工程式的特點
示例程式:
import socket import threading def send_msg(udp_socket, dest_ip, dest_port): """傳送訊息""" while True: send_data = input("請輸入要傳送的資訊:") udp_socket.sendto(send_data.encode("utf-8"), (dest_ip, dest_port)) def recv_msg(udp_socket): """接收訊息""" while True: recv_data = udp_socket.recvfrom(1024) recv_ip = recv_data[1] recv_msg = recv_data[0].decode("utf-8") print("\n>>%s:%s" % (recv_ip, recv_msg)) def main(): # 建立套接字 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 繫結本地埠 udp_socket.bind(("", 8888)) # 輸入對方的ip和地址 dest_ip = input("請輸入對方的ip:") dest_port = int(input("請輸入對方的port:")) t1 = threading.Thread(target=send_msg, args=(udp_socket, dest_ip, dest_port)) t1.start() t2 = threading.Thread(target=recv_msg, args=(udp_socket,)) t2.start() if __name__ == "__main__": main()
終端執行結果:
$ python3 聊天器-多執行緒版.py
請輸入對方的ip:192.168.92.130
請輸入對方的port:8080
請輸入要傳送的資訊:hello
請輸入要傳送的資訊:
>>('192.168.92.130', 8080):666
網路除錯助手的結果:
程式執行過程解析:
- 首先建立套接字,並繫結到本地的埠
8888
- 輸入要進行聊天的對方的ip和埠資訊
- 啟動兩個執行緒,一個執行緒用於傳送資料,一個執行緒用於接收資料