Python学习---基于UDP协议的多任务网络通信程序案例

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()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值