1. 程式人生 > >python網路聊天器多執行緒版

python網路聊天器多執行緒版

在之前的一篇文章(python網路程式設計-udp)中實現了一個簡單的udp聊天器,只能在單執行緒下進行收發資料,在學習完多執行緒之後,實現一個能同時收發資料的udp聊天器。

說明:

  • 編寫一個有2個執行緒的程式
  • 執行緒1用來接收資料然後顯示
  • 執行緒2用來檢測鍵盤資料然後通過udp傳送資料

要求:

  1. 實現上述要求
  2. 總結多工程式的特點

示例程式:

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和埠資訊
  • 啟動兩個執行緒,一個執行緒用於傳送資料,一個執行緒用於接收資料