网络编程(十)——基于UDP协议的套接字

TCP和UDP协议传输对比

  • TCP协议传输数据可靠,TCP传输数据后,如果收到接收方回应消息,则会在本机缓存中删除已发送消息;如果没有收到接收方回应消息,则会利用缓存继续发送消息。
  • UDP协议传输数据相对来说不可靠,发送方只要发出消息即完成任务。但是UDP传输无需建立三次握手链接,开销较小,也不需要等待对方回应,发送效率很高

模拟UDP通讯

服务端代码 

# 不建议使用这种导入方式,因为导入一个模块的全部内容占用较大空间
# 对于socket编程来说,其中会用到大量socket函数,全部导入还是会少写许多代码
from socket import *

# socket.SOCK_DGRAM -> UDP协议又称数据报协议
server = socket(AF_INET,SOCK_DGRAM)
server.bind(("127.0.0.1",8080))

# UDP无需建立链接

# 通信循环
while True:
    data,client_addr = server.recvfrom(1024)
    print(data)

    server.sendto(data.upper(),client_addr)
server.close()

客户端代码

from socket import *

client = socket(AF_INET,SOCK_DGRAM)

# 通信循环
while True:
    msg = input(">>:").strip()
    client.sendto(msg.encode("utf-8"),("127.0.0.1",8080))

    data,server_addr = client.recvfrom(1024)
    print(data,server_addr)
client.close()

 

UDP通讯特点

1、UDP协议不会粘包

2、客户端发送的数据量大于服务端接收限制时,Windows系统会报错:

OSError: [WinError 10040] 一个在数据报套接字上发送的消息大于内部消息缓冲区或其他一些网络限制,或该用户用于接收数据报的缓冲区比数据报小。

如果是Linux系统,不会报错,它会按照服务端设置的接收量来接收数据:

例如:客户端发送b'hello',服务端设置接收数据最多为一个字节(recvfrom(1)),那么服务端收到的数据就是b'h'

所以,使用UDP协议通讯会有消息不见的现象,比如QQ

3、浏览器查询数据时一般也是基于UDP通讯,毕竟用UDP效率高,即使出现数据丢失问题(比如我没有查到想要的信息),那我再查询一次就行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今天自洽了吗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值