【案例】多线程实现基于UDP协议的聊天器

博主前言:

在上一篇博客中,我讲述了用多线程的方式实现多任务,结合套接字编程的内容,我们已经具备了实现开发简单的基于UDP协议的聊天功能的程序,本来今天准备写一下多任务的另一种实现方式:多进程。但是今天事情有点多,写写停停思绪也没能集中,所以干脆停笔了,打算明天再写,加油!

整体逻辑:

def main():
    # 1. 创建udp套接字
    udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    # 2. 套接字绑定一个端口号
    udp_socket.bind(("",1314))
    # 3. 获得通信对方的ip和port
    dest_ip = input("请输入对方的ip:")
    dest_port = int(input("请输入对方的port:"))	# 注意强制转换
    # 4。 创建两个子线程,一个用于发送数据,一个用于接收数据
    t_recv = threading.Thread(target=recv_msg,args=(udp_socket,))
    t_send = threading.Thread(target=send_msg,args=(udp_socket,dest_ip,dest_port))
    t_recv.start()
    t_send.start()

首先,我们使用socket模块创建基于IPv4协议和UDP协议的socket对象;
然后,我们将套接字对象绑定上一个端口号;
接着,我们再用键盘获得通信目标的IP和Port,注意在获得Port时一定要强制转换为整型变量;
最后,最重要的一步就是,使用threading模块,创建两个子线程,分别执行发送函数和接收函数。

发送函数:

def send_msg(udp_socket,dest_ip,dest_port):
    """ 发送函数 """
    while True:
        send_data = input("请输入要发送的数据:")
        udp_socket.sendto(send_data.encode("gbk"),(dest_ip,dest_port))

接收函数:

def recv_msg(udp_socket):
    """ 接收函数 """
    while True:
        recv_data = udp_socket.recvfrom(1024)
        print("你收到的数据是:"+recv_data[0].decode("gbk"))    # recv_from函数返回的对象是一个元组,包含数据的内容和来源

这样我们一个简单的多线程实现基于UDP协议的聊天器就写好了,我们用网络调试助手run一下,看看效果。
在这里插入图片描述在这里插入图片描述

发布了5 篇原创文章 · 获赞 7 · 访问量 1877

猜你喜欢

转载自blog.csdn.net/qq_43462005/article/details/104057428