py网络_UDP通讯笔记

UDP通讯

UDP也是工作在传输层上的一种协议,但是与TCP相比,UDP本身采用的是不安全的 连接,所以来讲每一次通过UDP发送的数据不一定可以接收到,但是由于其性能比较好,所以未来会有比较广阔的发展前景,在Python里面对于TCP或者UDP本身的实现结构差别不大,都是通过socket.socket类完成的,只需要设置一些参数即可将其设置为UDP(数据报协议)。

服务端代码

此时的UDP服务端与TCP最大的区别在于不再需要过多地考虑到数据稳定性的连接问题,所以也不再设置有具体的监听操作,在每一次接收到请求之后只需要获取客户端的原始地址,直接根据原路返回即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# coding : UTF-8
import socket
SERVER_HOST = "localhost"
SERVER_PORT = 8080 # 服务绑定端口
def main(): # 主函数
# socket.AF_INET使用IPV4网络协议进行服务端创建;
# socket.SOCK_DGRAM: 创建一个数据报协议的网络端(UDP)
with socket.socket(socket.AF_INET,socket.SOCK_DGRAM) as server_socket: # 创建了一个服务端的Socket
server_socket.bind((SERVER_HOST,SERVER_PORT)) # 绑定本机的8080端口
print("【服务端】服务器启动完毕,在“%s”端口上监听,等待客户端连接...." % SERVER_PORT)
while True: # 不断的进行数据的接收
data,addr = server_socket.recvfrom(30)
print("[服务端]客户端连接到服务器端,客户端的地址为:%s、连接端口:%s" % addr)
echo_data = ("【ECHO】%s" % data.decode("UTF-8")).encode("UTF-8")
server_socket.sendto(echo_data,addr) # 将内容响应到发送端上
if __name__ == "__main__":
main()

客户端代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# coding : UTF-8
import socket
SERVER_HOST = "localhost" # 服务器的主机名称或IP地址
SERVER_PORT = 8080 # 服务器连接端口
def main(): # 主函数
with socket.socket(socket.AF_INET,socket.SOCK_DGRAM) as client_socket: # 建立客户端Socket
while True: # 客户端一定要不停地与服务端交互
input_data = input("请输入要发送的数据(输入空结束):") # 键盘输入
if input_data: # 有数据输入
client_socket.sendto(input_data.encode("UTF-8"),(SERVER_HOST,SERVER_PORT)) # 数据发送
echo_data = client_socket.recv(100).decode("UTF-8") # 回应数据
print("服务端响应数据:%s" % echo_data) # 输出内容
else:
break # 退出交互
if __name__ == "__main__":
main() # 调用主函数

运行测试

通过程序的执行对比就可以非常清楚的发现,整个的UDP程序完全没有受到连接的控制,所以当前的程序可以得到较好的处理性能,同时对于客户端来讲直接进行发送即可。


py网络_UDP通讯笔记
https://blog.wangxk.cc/2020/02/06/py网络-UDP通讯笔记/
作者
Mike
发布于
2020年2月6日
许可协议