socket库:Python实现UDP客户和服务器通信
【摘要】
目录
前言服务器代码客户端代码
前言
前文使用TCP面向流的套接字,今天讲解的UDP的工作方式与TCP/IP不同。UDP是用户数据报协议,是一个面向消息的协议。
一方面,UDP不需要一个长期活动连接,所以建立UDP套接字稍微简单一些。另一方面,UDP消息必须放在一个数据报中。
在IPv4中,数据报包含65507个字节,这些字节信息中还包括首部信息。因...
前言
前文使用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)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
其中,recvfrom()表示从套接字读取消息,比如客户但发送消息后,消息与客户但地址都在里面。
至于sendto()很好理解,就是发送消息给别人。参数1表示消息内容,参数2就是发送到哪里(也就是对方的地址)。
客户端代码
客户端当然比服务器更简单,因为UDP不需要连接,可以直接将消息发送到服务器,并使用recvfrom()响应。示例如下:
import socket
sock = 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()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
同样的,这里sock.recvfrom()用于接收服务器反馈的消息内容与地址。运行之后,效果如下所示:
文章来源: liyuanjinglyj.blog.csdn.net,作者:李元静,版权归原作者所有,如需转载,请联系作者。
原文链接:liyuanjinglyj.blog.csdn.net/article/details/117414131
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)