import socket
import threading
def send_msg(udp_socket):
"""发送信息的函数"""
# 1、定义变量接受用户输入的接收方的ip地址:
ipaddr = input("请输入接收方的ip地址:\n")
# 判断是否需要自动输入本地ip:
if len(ipaddr) == 0:
ipaddr = "192.168.52.2"
print(f"当前默认本地ip地址是:{ipaddr}")
# 2、定义变量接收用户输入的端口号:
port = input("请输入接收方的端口号:\n")
if len(port) == 0:
port = "10000"
print(f"当前默认本地端口号是:{port}")
# 3、定义变量接收信息内容:
content = input("请输入发送信息内容:\n")
# 4、使用socket的sendto()发送信息:
udp_socket.sendto(content.encode("gbk"), (ipaddr, int(port)))
def recv_msg(udp_socket):
"""接收信息的函数"""
while True:
# 1、使用socket接收数据
recv_data, ip_port = udp_socket.recvfrom(1024)
# 2、解码数据
recv_text = recv_data.decode("gbk")
# 3、输出显示
print(f"接收到{str(ip_port)}的消息:{recv_text}")
def main():
"""程序入口"""
# 1、创建套接字
udp_stock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 2、绑定端口号
address = ("", 10000)
udp_stock.bind(address)
# 创建子线程单独接收消息
thread_recvmsg = threading.Thread(target=recv_msg, args=(udp_stock,))
# 设置子线程守护主线程
thread_recvmsg.setDaemon(True)
# 启动接收信息的子线程
thread_recvmsg.start()
# 3、打印菜单
while True:
print("\n\n*********************菜单**********************")
print("*****************1、发送信息*******************")
print("*****************2、退出系统*******************")
# 4、接受用户输入选项
sel_num = int(input("请输入选项:\n"))
# 5、判断用户的选择,并且调用对应的函数
if sel_num == 1:
print("您选择的是发送信息")
send_msg(udp_stock)
elif sel_num == 2:
print("系统正在退出....")
print("系统退出完成!!")
break
# 6、关闭套接字
udp_stock.close()
if __name__ == '__main__':
main()
Python学习---基于UDP协议的多任务网络通信程序案例
于 2024-05-21 11:12:21 首次发布