pyhton3高级,udp⽹络程序(udp聊天器,多线程)

本文介绍了一个基于UDP协议的多线程聊天器实现过程,包括如何使用Python的socket和threading模块创建发送和接收消息的功能,并实现了基本的用户交互界面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天来进一步完善UDP传输协议编写的  UDP得聊天器.,比前面的几个版本功能都要强大哟.之前的版本,在我的博客里都是有的,如果有需要的话,可以去看看,都是一点点慢慢完善的.看完之后,你会有一个更好的思路,今天主要知识点:多线程

废话不多说,继续进入主题.

                                                                                 UDP多线程的聊天器

# 1.导入socket模块
import socket
# 6.导入线程模块
import threading

# 14.设置一个发送消息函数
def send_msg(udp_server_socket):
    ip_v4 = input("请输入接收方得IP地址 : ")
    if len(ip_v4) == 0:
        ip_v4 = "255.255.255.255"
        print("当前接收方默认IP地址是 : ", ip_v4)

    port = input("请输入接收方得端口地址 : ")
    if len(port) == 0:
        port = "8080"
        print("当前接收方默认端口地址是 : ", port)

    text = input("请输入发送内容 : ")
    if len(text) == 0:
        text = "天王盖地虎"
        print("当前默认发送内容是 : ", text)

    # 18.发送信息
    udp_server_socket.sendto(text.encode(), (ip_v4, int(port)))


# 15.设置一个接受消息的函数
def recv_msg(udp_server_socket):
    # 接收多条信息
    while True:
        # 19.recvfrom()接收信息
        udp_client_socket, _ip_port = udp_server_socket.recvfrom(1024)
        if udp_client_socket:
            try:
                udp_data = udp_client_socket.decode()
            except:
                udp_data = udp_client_socket.decode("gbk")
            print("客户端 : ", _ip_port, "发来消息 : ", udp_data)
        else:
            break


# 主方法
def main():
    # 2.创建套接字
    udp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # 3.设置广播权限
    udp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, True)

    # 4.设置地址重用
    udp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)

    # 5.绑定端口
    udp_server_socket.bind(("", 8080))
    

    # 7.创建子线程
    t1 = threading.Thread(target=recv_msg,args=(udp_server_socket,))

    # 设置守护线程
    t1.setDaemon(True)

    # 8.子线程开启
    t1.start()

    # 16.循环输出界面
    while True:
        # 9.设计一个聊天器的显示界面.
        print("\n\n")
        print("**************************")
        print("****   1.发送消息  ****")
        print("****   2.退出系统  ****")
        print("**************************")

        # 10.保存用户选择
        num = int(input("请输入你的选择 : "))

        # 11.根据用户输入进行调用函数方法
        if num == 1:
            send_msg(udp_server_socket)
        elif num == 2:
            print("正在执行退出")
            print("程序已经退出")
            break
    # 17.执行退出程序.结束
    udp_server_socket.close()


# 13.设置一个主程序入口
if __name__ == '__main__':
    main()

 

接下来打开咱们的网络调试助手.  如果没有的小伙伴,可以百度下载一个,也可以从我的优快云上下载一个,感谢支持.

https://download.youkuaiyun.com/download/s1433972007lj/10651878  这个是下载链接.有需要的小伙伴可以下载.

接下来我们打开网络调试助手,并且进行调试.

 

 

在刚开始连接的时候,IP地址和端口号一定要写正确哟,要不然会导致接收不到信息

接下来咱们发几条信息测试一下~~

 

 

好的,请看图片,咱们的信息已经发送成功.已经成功接收到了

再接下来,就看看回馈给网络调试助手信息

 

 

OK,到这里基本上就测试完毕了.发送和接收都没有问题

目前为止咱们今日的目标已经达到了

 

这个UDP的多线程聊天器,其实对于刚入门的人来说还是蛮有难度的.需要用到的只是点也很多

主要有各种的方法.

UDP传输协议的 :

发送消息:sendto()    接收消息:recvfrom     编码:encode()   解码:decode()   decode("gbk")

创建套接字:

1.导入模块   2.调用socket()方法创建套接字   3.设置广播权限: 套接字.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST

, True)

4.设置端口重用:套接字.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)

5.绑定端口:套接字.bind()

6.关闭套接字:套接字.close() 

创建子线程:

1.导入线程模块

2.创建子线程:调用Thread()方法

3.开始子线程:子线程.start()

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值