python udp的應用 ,多線程實現聊天功能
之前我們一起實現過單線程的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()
查看原文 >>