博主前言:
在上一篇博客中,我讲述了用多线程的方式实现多任务,结合套接字编程的内容,我们已经具备了实现开发简单的基于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一下,看看效果。