python udp的应用 ,多线程实现聊天功能

manongpengzai 2018-11-04

之前我们一起实现过单线程的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()

python udp的应用 ,多线程实现聊天功能

相关推荐