源作者:fangel
python 程序运行1、需求描述:
通过python实现如下功能:网络协议采用UDP协议,将本机电脑或者其他电脑发送的文本信息接收并打印出来,在接收端打印的内容包括发送端发送的内容,发送端的IP地址,发送端的端口号等。
代码的基本写作思想是创建套接字,绑定本地端口,接收数据,关闭套接字。
需要注意的是接收到的内容是元组格式,并且信息内容是byte字节表示的,因此要转换成字符串格式,具体在下面的代码中有注释。
2、python代码实现:
# ################################## 18、基于UDP的网络编程之接收数据 #######################
from socket import *
# 1. 创建udp套接字
udp_socket = socket(AF_INET, SOCK_DGRAM)
# 2. 绑定本地的IP地址(可以忽略)和端口号。这样发送方的程序才能知道数据该发送到哪里
local_addr = ("", 1025)
udp_socket.bind(local_addr)
# 3. 等待接收对方发送的数据;1024表示允许接收的最大字节数
recv_data = udp_socket.recvfrom(1024)
# 4. 打印对方发送的数据,接收到的数据recv_data是一个元组,格式:(b'test', ('127.0.0.1', 62641))
# 4.1 第1个元素是对方发送的数据
recv_msg = recv_data[0].decode('gbk')
print("发送端的数据是:%s" % recv_msg)
# 4.2 第2个元素是对方的ip和端口,也是一个元组
recv_ip = recv_data[1][0]
recv_port = recv_data[1][1]
print("发送端的IP地址是:%s" % recv_ip)
print("发送端的port端口号是:%s" % recv_port)
# 5. 关闭套接字
udp_socket.close()
3、准备发送端的程序:
可以参考上篇博客,用IPOP工具来实现UDP报文的发送。打开该工具后,要发送的内容在“服务-》UDP-》客户端”中可以设置。按照如下的步骤进行操作:
python程序运行后没反应(1)先运行刚才完成的python程序,运行完成后,程序无任何反应,在等待接收数据
(2)打开IPOP,按照下图进行设置,设置接收端的服务器地址127.0.0.1(本次代码是在本机调试的,因此IP地址是本机的环回地址),端口号为1025(要和代码中接收端绑定的端口号一致),发送的字符串以及源端口
(3)此时,在运行着的python程序中有如下的打印信息,可以看出,正确的打印出了发送端发送的字符串 test123