前言前文使用TCP面向流的套接字 , 今天讲解的UDP的工作方式与TCP/IP不同 。UDP是用户数据报协议 , 是一个面向消息的协议 。
一方面 , UDP不需要一个长期活动连接 , 所以建立UDP套接字稍微简单一些 。另一方面 , UDP消息必须放在一个数据报中 。
在IPv4中 , 数据报包含65507个字节 , 这些字节信息中还包括首部信息 。因为UDP不需要长期的连接 , 所以它无法得到TCP所能提供的传输保障 。
服务器代码因为UDP并没有连接 , 所以服务器不需要监听和接收连接 。它只需要使用bing()将其套接字与一个端口关联 , 然后等待各个消息 。
示例代码如下:
import socket# 1.创建一个套接字 , sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)sock.bind(('localhost', 10000))while True:data, address = sock.recvfrom(4096)print(data.decode('UTF-8'), address)if data:sent = sock.sendto('已接收到你发来的消息'.encode('UTF-8'), address)
其中 , recvfrom()表示从套接字读取消息 , 比如客户但发送消息后 , 消息与客户但地址都在里面 。
至于sendto()很好理解 , 就是发送消息给别人 。参数1表示消息内容 , 参数2就是发送到哪里(也就是对方的地址) 。
客户端代码客户端当然比服务器更简单 , 因为UDP不需要连接 , 可以直接将消息发送到服务器 , 并使用recvfrom()响应 。示例如下:
import socketsock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)try:msg = "发送消息到服务器".encode('utf-8')sent = sock.sendto(msg, ('localhost', 10000))data, server = sock.recvfrom(4096)print(data.decode())finally:sock.close()
【socket通信原理 udpsocket使用编程】同样的 , 这里sock.recvfrom()用于接收服务器反馈的消息内容与地址 。运行之后 , 效果如下所示:
文章插图
文章插图
推荐阅读
- wifi广告机的联网方法 wifi热点广告机原理
- 性传播什么东西原理
- 性传播疾病的原理是什么呢
- 自行车的刹车是杠杆原理吗
- 人民日报批通信套餐乱象 套餐更换升级容易降档难
- 英雄联盟手游双通道通信模式有什么用 lol手游双通道通信模式作用介绍
- 孢子香料采集车怎么造 孢子香料采集车制造原理分享
- 全球行动通行证升级攻略 全球行动通信证怎么快速升级
- 控制通信部怎么过去 控制去通信部的方法
- 微软飞行模拟飞行原理是什么 微软飞行模拟飞机飞行原理介绍