python udp通信_Python - UDP通信

UDP通信原理

由于UDP协议不是基于链接的协议,所以在发送数据的时候不需要建立链接。在数据的每一次发送和接收的时候,都需要发送UDP报头,指定接收端的IP和端口信息。效率与TCP相比更高。使用UDP的常见服务如DNS,FTP等。

UDP数据包一般包含512个字节,当大于512字节时,可能会出现传输不稳定的情况。

示例:

# 服务端

# coding=utf-8

import socket

server=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 基于网络的数据报协议 UDP

server.bind(('127.0.0.1',8080))

while True:

msg,addr=server.recvfrom(1024)

print(msg,addr)

server.sendto(msg.upper(),addr)

# 客户端

#_*_coding:utf-8_*_

import socket

client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

while True:

msg=input('>>: ').strip()

if not msg:continue

client.sendto(msg.encode('utf-8'),('127.0.0.1', 8080))

back_msg,addr=client.recvfrom(1024)

print(back_msg.decode('utf-8'),addr)

UDP每个发送的数据都含所有自身的报头,不像TCP那样是流式的数据,所以不存在粘包现象。

udp的recvfrom是阻塞的,一个recvfrom(x)必须对唯一一个sendto(y),收完了x个字节的数据就算完成,若是y>x数据就丢失,这意味着udp根本不会粘包,但是会丢数据,不可靠。

tcp 协议的数据不会丢,没有收完的包下一次会接着收取上一次没收完的数据,本端总是在收到ack时才会清除缓冲区内容。数据是可靠的,但是会粘包。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值