Python用UDP编写一个简单的通信实例
程序员文章站
2022-07-12 19:35:34
...
Python实现TCP通信的实例:https://blog.csdn.net/SenrendipityAl/article/details/103383706
UDP通信
UDP是面向无连接的协议,使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包。优点是速度快,协议简单,而且由于UDP无需建立连接所以可支持广播发送等,但其缺点是无法保证数据可靠到达。
接下来我尝试用Python实现UDP协议的端对端通信。
UDP服务器
Socket函数原型及参数选择:
int socket(int domain, int type, int protocol)
socket(AF_INET/AF_INET6/AF_PACKET/AF_UNIX/ AF_LOCAL,SOCK_STREAM/SOCK_DGRAM/SOCK_SEQPACKET/SOCK_RAW,IPPROTO_TCP/IPPTOTO_UDP/IPPROTO_SCTP/IPPROTO_TIPCTCP)
# 导入套接字的包
import socket
# 创建UDP的套接字
# 在本程序中的参数选择如下:
# socket(IPv4网络通信, 数据报套接字, UDP传输协议)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 客户端IP和端口号
HOST = '127.0.0.1'
PORT = 9999
s.bind((HOST, PORT))
# 循环接收Client数据
while True:
# 利用recvfrom()方法获取数据和客户端的信息
data, addr = s.recvfrom(1024)
print("Received from %s: %s" % (addr, data.decode('gb2312')))
s.sendto('I got it!'.encode('gb2312'), addr)
输出结果
注意事项
需要注意的是,由于addr有两个元素,如下图:
所以在输出如若不加括号,则addr的第二个元素会在第二个%s处打印,导致输出不雅观。
UDP客户机
# 导入套接字的包
import socket
HOST = '127.0.0.1'
PORT = 9999
# 客户端使用UDP时,首先仍然创建基于UDP的Socket,然后,直接通过sendto()给服务器发数据
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
while True:
print('Please input your data:')
InputData = input('> ')
# 发送数据
s.sendto(InputData.encode('gb2312'), (HOST, PORT))
# 接收数据
ReceiveData = s.recv(1024)
print(ReceiveData.decode('gb2312'))
输出结果
注意事项
由于传输数据时的数据格式为byte,所以在使用数据时需要进行数据格式的转换,本实例中采用encode()和decode()函数进行简易转换,且采用gb2312编码可以支持汉字信息。
上一篇: 关闭底层资源强行中断
下一篇: java的线程状态