之前我們一起實現過單線程的udp聊天功能,但是並不實用,這裏我們用多線程重新寫下

代碼如下:

import socket

import threading

def print_menu():

"""顯示菜單"""

print("請輸入你要進行的操作: 1 發送數據 2接收數據 3退出")

def recv_data(udp_socket):

"""接收數據"""

# 數據 發送人地址

data, remote_address = udp_socket.recvfrom(4096)

print("收到來自%s的數據-----%s" % (remote_address, data.decode()))

def send_data(udp_socket):

"""發送數據"""

"""

請輸入你要發送的數據:你喫了大蒜嗎?

IP地址:192.168.113.113

端口:8080

"""

# 接收用戶輸入的數據 IP port

data = input("請輸入你要發送的數據:")

ip = input("IP地址:")

port = int(input("端口:"))

udp_socket.sendto(data.encode(), (ip, port))

def main():

# 顯示一個界面(菜單) 請輸入你要進行的操作: 1 發送數據 2退出

# 創建一個子線程 專門收數據

# 主線程 用以接收用戶鍵盤輸入 發送

# 創建套接字

udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 創建線程 收數據

recv_thd = threading.Thread(target=recv_data, args=(udp_socket,))

recv_thd.start()

# 在使用之前進行綁定

udp_socket.bind(('', 8888))

while True:

print_menu()

# 接收用戶輸入

op = input("請選擇:")

if op == '1':

send_data(udp_socket)

elif op == '2':

break

else:

print("出錯了")

# 關閉

udp_socket.close()

if __name__ == '__main__':

main()

查看原文 >>
相關文章