博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python UDP-数据报协议
阅读量:5952 次
发布时间:2019-06-19

本文共 1826 字,大约阅读时间需要 6 分钟。

基于udp协议通信的套接字

服务端

1 from socket import * 2  3 server = socket(AF_INET, SOCK_DGRAM)  # SOCK_DGRAM=>数据报协议 4 server.bind(('127.0.0.1', 8080)) 5  6 print('start....') 7 while True: 8     data, client_addr = server.recvfrom(1024)  # (b'hello', ('127.0.0.1', 49318)) 9     server.sendto(data.upper(), client_addr)10 11 server.close()

 

 

客户端

1 from socket import * 2  3 client = socket(AF_INET, SOCK_DGRAM)  # SOCK_DGRAM=>数据报协议 4  5 while True: 6     msg = input('>>: ').strip() 7     client.sendto(msg.encode('utf-8'), ('127.0.0.1', 8080)) 8     data, server_addr = client.recvfrom(1024) 9     print(data)10 11 client.close()

 

 

数据报协议的特点1

当发送的数据报大于接收数据报的缓冲区大小时:

  在windows系统: 接收端会抛出异常

  在Linux系统: 接收端不会抛出异常, 会丢弃掉多余的数据

 

服务端

1 from socket import *2 3 server = socket(AF_INET, SOCK_DGRAM)  # SOCK_DGRAM=>数据报协议4 server.bind(('127.0.0.1', 8081))5 6 server.recvfrom(1) >>>OSError: [WinError 10040] 一个在数据报套接字上发送的消息大于内部消息缓冲区或其他一些网络限制,或该用户用于接收数据报的缓冲区比数据报小。

 

客户端

1 from socket import *2 3 client = socket(AF_INET, SOCK_DGRAM)  # SOCK_DGRAM=>数据报协议4 5 client.sendto(b'hello', ('127.0.0.1', 8081))

 

 

数据报协议的特点2

UDP协议没有粘包问题

UD协议能够稳定传输数据的最大数据量为512Bytes

 

服务端

1 from socket import * 2  3 server = socket(AF_INET, SOCK_DGRAM)  # SOCK_DGRAM=>数据报协议 4 server.bind(('127.0.0.1', 8081)) 5  6 data1 = server.recvfrom(1024) 7 print('第一次接收: ', data1) 8 data2 = server.recvfrom(1024) 9 print('第二次接收: ', data2)10 data3 = server.recvfrom(1024)11 print('第三次接收: ', data3) >>>第一次接收: (b'hello', ('127.0.0.1', 55249)) >>>第二次接收: (b'world', ('127.0.0.1', 55249)) >>>第三次接收: (b'egon', ('127.0.0.1', 55249))

 

客户端

1 from socket import *2 3 client = socket(AF_INET, SOCK_DGRAM)  # SOCK_DGRAM=>数据报协议4 5 client.sendto(b'hello', ('127.0.0.1', 8081))6 client.sendto(b'world', ('127.0.0.1', 8081))7 client.sendto(b'egon', ('127.0.0.1', 8081))

 

转载于:https://www.cnblogs.com/earon/p/9575578.html

你可能感兴趣的文章
mysql开启binlog
查看>>
设置Eclipse编码方式
查看>>
分布式系统唯一ID生成方案汇总【转】
查看>>
并查集hdu1232
查看>>
Mysql 监视工具
查看>>
从前后端分离到GraphQL,携程如何用Node实现?\n
查看>>
Linux Namespace系列(09):利用Namespace创建一个简单可用的容器
查看>>
nginc+memcache
查看>>
Numpy中的random模块中的seed方法的作用
查看>>
关于jsb中js与c++的相互调用
查看>>
POJ-2251 Dungeon Master
查看>>
tortoisesvn的安装
查看>>
URAL 1353 Milliard Vasya's Function DP
查看>>
速读《构建之法:现代软件工程》提问
查看>>
Android onclicklistener中使用外部类变量时为什么需要final修饰【转】
查看>>
django中聚合aggregate和annotate GROUP BY的使用方法
查看>>
TFS简介
查看>>
docker管理平台 shipyard安装
查看>>
Bootstrap3 栅格系统-简介
查看>>
ADODB类库操作查询数据表
查看>>