php udp 非阻塞,使用非阻塞udp读取时丢失消息
当在两个主机之间使用非阻塞的udp读取时,我有丢失消息的问题。发送者在linux上,读取器在winxp上。python中的这个例子显示了这个问题。
这里有三个脚本用于显示问题。
发送.py:import socket, sys
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
host = sys.argv[1]
s.sendto('A'*10, (host,8888))
s.sendto('B'*9000, (host,8888))
s.sendto('C'*9000, (host,8888))
s.sendto('D'*10, (host,8888))
s.sendto('E'*9000, (host,8888))
s.sendto('F'*9000, (host,8888))
s.sendto('G'*10, (host,8888))
读取.pyimport socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(('',8888))
while True:
data,address = s.recvfrom(10000)
print "recv:", data[0],"times",len(data)
读取nb.pyimport socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(('',8888))
s.setblocking(0)
data =''
address = ''
while True:
try:
data,address = s.recvfrom(10000)
except socket.error:
pass
else:
print "recv:", data[0],"times",len(data)
示例1(工作正常):
ubuntu>;python send.py
winxp>;读取.py
从read.py中给出这个ok结果:
记录:A乘以10
记录:B乘以9000
接收:C乘以9000
接收:D乘以10
接收:E乘以9000
接收:F乘以9000
记录:G乘以10
示例2(缺少消息):
在这种情况下,read_nb.py通常不会捕获短消息
我举了两个例子来说明它的样子。
ubuntu>;python send.py
winxp>;读取nb.py
从read_nb.py给出此结果:
记录:A乘以10
记录:B乘以9000
接收:C乘以9000
接收:D乘以10
接收:E乘以9000
记录:F乘以9000
上面是最后一条丢失的10字节消息
下面是中间缺少的10字节消息
记录:A乘以10
记录:B乘以9000
接收:C乘以9000
接收:E乘以9000
接收:F乘以9000
记录:G乘以10
我已经在windows上与wireshark进行了检查,每次捕获所有消息时,它们都会到达主机界面,但不是由read_nb.py捕获的。怎么解释?
我还尝试过在linux上使用read_nb.py,在windows上使用send.py,然后它就工作了。
所以我想这个问题和winsock2有关
或者我使用非阻塞udp的方式不对?
php udp 非阻塞,使用非阻塞udp读取时丢失消息相关推荐
- Linux Socket网络编程UDP、TCP 阻塞与非阻塞 断线重连机制
三种非阻塞模式的方法: (1) fcntl函数 int Mode = fcntl(sockfd, F_GETFL, 0); //获取文件的Mode值 fcntl(sockfd, F ...
- 阻塞、非阻塞、多路复用、同步、异步、BIO、NIO、AIO 一锅端
承接上文的操作系统,关于IO会涉及到阻塞.非阻塞.多路复用.同步.异步.BIO.NIO.AIO等几个知识点.知识点虽然不难但平常经常容易搞混,特此Mark下,与君共勉. 1 阻塞跟非阻塞 1.1 阻塞 ...
- 从缓冲上看阻塞与非阻塞socket在发送接收上的区别
最近在网络上看到一些帖子以及回复,同时又搜索了一些网络上关于阻塞非阻塞区别的描述,发现很多人在描述两者的发送接收时操作返回以及缓冲区处理的区别时有不同程度的误解.所以我想写一篇文章来纠正错误,并作为记 ...
- python gevent模块 下载_Python协程阻塞IO非阻塞IO同步IO异步IO
Python-协程-阻塞IO-非阻塞IO-同步IO-异步IO 一.协程 协程又称为微线程 CPU 是无法识别协程的,只能识别是线程,协程是由开发人员自己控制的.协程可以在单线程下实现并发的效果(实际计 ...
- IO:同步,异步,阻塞,非阻塞
IO - 同步,异步,阻塞,非阻塞 都是老生常谈的东西,多通读几遍,理解透彻! 实际上同步与异步是针对应用程序与内核的交互而言的.同步过程中进程触发IO操作并等待(也就是我们说的阻塞)或者轮询的去查看 ...
- 从缓冲上看阻塞与非阻塞socket在发送接收上的区别(转载)
转自:http://blog.chinaunix.net/uid-24517549-id-4044877.html 首先socket在默认情况下是阻塞状态的,这就使得发送以及接收操作处于阻塞的状态,即 ...
- 系统间通信1:阻塞与非阻塞式通信B
版权声明:本文引用https://yinwj.blog.csdn.net/article/details/48274255 接上篇:系统间通信1:阻塞与非阻塞式通信A 4.3 NIO通信框架 目前流行 ...
- 从 Linux 源码看 Socket 的阻塞和非阻塞
转载自 从 Linux 源码看 Socket 的阻塞和非阻塞 笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情. 大部分高性能网络框架采用的是非阻塞模式.笔者这 ...
- Linux IO - 同步,异步,阻塞,非阻塞
From:http://blog.csdn.net/historyasamirror/article/details/5778378 同步/异步,阻塞/非阻塞概念深度解析:http://blog.cs ...
最新文章
- input type右对齐与只读的
- 我在 GitHub 上都见过哪些沙雕项目?
- 将整个ASCII文件读入C ++ std :: string [重复]
- mfc程序转化为qt_工控编程,Qt 学习之路
- 3、以太网基础知识——ARP地址解析协议原理
- 简颢集团“风口”下的投资机会 新能源共享领域的机遇与挑战
- 【Spring】Spring hibernate JSR-303 Validator 自定义参数校验器
- 省市三级联动(数据库)
- 关于 ThreeJS 线宽 lineWidth 无法正常显示 太大 需要缩小 窗口缩放会影响线粗细 等问题
- 致所有仍然关注BreezeMaphack的朋友
- 华米科技“中美两开花”:美股主体将更名为ZEPP,业绩已腰斩
- 怎样远程控制另一台电脑
- 河南山东商会刘继臣 全国工商联·万祥军:商协社团儒商大会
- 边际效用价值论:从钻石和水的悖论谈起
- uoj#311 【UNR #2】积劳成疾
- ssm智慧养老服务平台毕业设计-附源码211709
- 计算机组成原理(3)-哈工大
- java编程输出平行四边形_JAVA语言入门教程之打印图形实例——打印平行四边形...
- Java+JSP+MySQL基于SSM的医院挂号就诊系统
- IBM Thinkpad 笔记本型号保修全揭秘(这个全点)
热门文章
- linux apache gzip filters,Linux Apache2如何开启gzip (deflate module) 压缩功能
- 大咖白话 Serverless 训练营,限时报名开启!
- 深入浅出讲解MSE Nacos 2.0新特性
- 阿里面试官:什么样的人能在阿里晋升?
- 免费下载 | 全景揭秘阿里文娱智能算法
- mysql mail_vpopmail+mysql
- freemarker 生成 Java 代码
- 剑与远征种族刻印让玩家期待,绿裔刻印真有那么好看
- Java中Collection与Collections的区别
- Linux命令及文件操作