社区
网络编程
帖子详情
请问:程序中能不能完全接收到死循环所发出的数据?
fangxu1999
2010-01-25 10:53:25
我为了测试网络的负载压力情况,设置了一个发送数据的测试程序
// 10s测试
while(GetTickCount() - start <10000)
{
send(s, buffer, 1024, 0);
// Sleep(1);
}
发现当Sleep存在时能够完全收到数据,可是当注释掉以后,丢失数据很严重。
因为实际的数据量很快,所以存在很大的隐患,请问有办法解决吗?
谢谢了!
...全文
123
13
打赏
收藏
请问:程序中能不能完全接收到死循环所发出的数据?
我为了测试网络的负载压力情况,设置了一个发送数据的测试程序 // 10s测试 while(GetTickCount() - start <10000) { send(s, buffer, 1024, 0); // Sleep(1); } 发现当Sleep存在时能够完全收到数据,可是当注释掉以后,丢失数据很严重。 因为实际的数据量很快,所以存在很大的隐患,请问有办法解决吗? 谢谢了!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fangxu1999
2010-01-27
打赏
举报
回复
了解网络收发的问题了,谢谢大家。
lin0119
2010-01-26
打赏
举报
回复
应用层,根本就不用考虑拥塞的情况。
TCP协议的可靠性就是靠校验,回报,重传机制来实现的,但不在应用层处理,send()的返回值就表示已经被接收方确认正确的字节数,看看拔掉网线的情况下send()的返回值吧。
数据量多就参考一下网络下载软件的做法:把文件打小包,断点续传。
dong364
2010-01-26
打赏
举报
回复
要看send的返回值,返回值表达了发送是否成功,如果>0则表示已发送的字节数,楼主的这种压力测试不够好,应该创建多个连接或多个socket同时进行发送
zhou1xp
2010-01-26
打赏
举报
回复
如果你用的是标准的SOCKET,那么你的send函数要重新封装,一般来说,它不一定能一次发送完毕的
eyodo8
2010-01-26
打赏
举报
回复
打酱油!~
fangxu1999
2010-01-26
打赏
举报
回复
刚刚了解到错误不是在接收部分,而是发生在发送缓冲区溢出上,并不是网络上丢数据。
之前一直以为TCP协议是可靠的数据传输协议,如果这样的的话,就不能够随便发送报文了?
请问是不是凡是数据量很多、很快时,都需要人工干预来控制网络的收发啊?
还有就是上面各位说的用事件量来进行同步,可是通常情况下,网络的收发是运行在不同的主机上的,这无法直接使用事件了,是不是需要通过TCP的网络连接进行回报数据状态啊?这不就会导致网络通信更加拥塞吗?
谢谢大家。
lin0119
2010-01-26
打赏
举报
回复
应该检测send(s, buffer, 1024, 0); 的返回值
如果返回不成功就重发。
当你把本机的缓冲区填满以后,错误发生在你的机器上而不是在网络上。
yangcuncunzhang
2010-01-26
打赏
举报
回复
1楼的说的对!
典型的数据通信同步问题,你在不停发送时,接收端不一定能和你的发送速度同步,即使在速度上同步,也不能保证任何时刻都完全同步,因此,就会有来不及收数据的情况出现! 而且还会大量占用CPU时间。
典型做法是发送数据按照一定的大小,即每次发一个包(包大小自己根据实际情况决定),然后等待一个Event,此时发送端会处在等待状态,释放CPU。
此时接收方接收到数据后,设置对应的Event,发送方就会接收到这个Event(这相当于一个回应), 然后再发送下一个包。
例子可能不是非常恰当,但意思是一样的。如果你想测试网络负载能力,可以将数据包加大!
crst_zh
2010-01-25
打赏
举报
回复
[Quote=引用 4 楼 zyyoung 的回复:]
做个信号量,阻塞吧
[/Quote]
我一般用Event来做
zyyoung
2010-01-25
打赏
举报
回复
做个信号量,阻塞吧
crst_zh
2010-01-25
打赏
举报
回复
[Quote=引用 2 楼 aoyihuashao 的回复:]
有sleep的时候,为什么丢失数据?
[/Quote]
有sleep()的时候并不一定完全正确,你可以试试:数据量再加大,sleep()再缩短,发送间隔也缩短。
aoyihuashao
2010-01-25
打赏
举报
回复
有sleep的时候,为什么丢失数据?
crst_zh
2010-01-25
打赏
举报
回复
那是因为你发送的太快了来不及接收导致缓冲区被冲掉
使用sleep虽然简单,但是还不是最好,有可能太长,导致资源浪费,或者太短,还会出现数据丢失的现象。可以这样:
发送一定量的数据,等待对方一个回应信号采集需发送,利用waitforsingleobject()来等待一个事件
这种方法相当于通过接收方进行流控,我最近的几个项目都是这么做的,其中一个是通过CAN总线进行64个DSP单元的在线烧写,使用上只等待接收方的信号在进行发送,效果很好。
计算机网络第三章:
数据
链路层
§3.1
数据
链路层功能概述 1.节点: 计算机网络中的中的主机路由器等都可以叫节点。 2.链路: 网络中两个节点之间的物理通道,链路的传输介质主要有双绞线光纤和微波。分为有线链路、无线链路。 3.
数据
链路: 网络中两个节点之间的逻辑通道,把实现控制
数据
传输协议的硬件和软件加到链路上就构成了
数据
链路。 4.帧: 链路层的协议
数据
单元,封装网络层
数据
报。 5.链路与
数据
链路之间的区别: 链路是物理通道、而
数据
链路是逻辑通道。
数据
链路层负责通过一条链路从一个结点向另一个物理链路直接相连的相邻
Java面经
文章目录项目问题
数据
回流架构
数据
流图设计总结成果你这个项目的QPS、订单量有多少如何解决超卖问题假如让你设计一个秒杀系统,怎么设计才能承受百万级并发秒杀系统场景特点秒杀架构设计理念架构方案设计思路前端方案浏览器端(js):后端方案服务端控制器层(网关层)服务层
数据
库层讲讲
数据
库表怎么设计的为什么使用自增字段作主键spring里面的控制反转,IoC高频搜索关键词,每个文件1G,每个文件有多行 TopK问题一个列表,找出最长的字串,满足字串的每个元素相差不超过limitjwt优缺点优点缺点使用场景虚函数是什么逻
一文讲透计算机网络的
数据
链路层
计算机网络③ 一、
数据
链路层功能概述 一、
数据
链路层的研究思想 二、
数据
链路层网络基本概念 节点:主机、路由器 链路:网络中两个节点之间的物理通道,链路的传输介质主要由双绞线、光纤、和微波。分为有线链路和无线链路。
数据
链路:网络中两个节点之间的逻辑通道,把实现控制
数据
传输协议的硬件和软件加到链路上就构成
数据
链路。 帧:链路层的协议
数据
单元,封装网络层
数据
报。 链路
数据
层负责通过一条链路从一个节点向另一个物理链路直接相连的相邻节点传送
数据
报。 三、
数据
链路层功能概述
数据
链路层在物理层提供服务的
计算机复试面试基础知识(八股文)(
数据
库、
数据
结构、操作系统、计网、机组等)
一、
数据
库部分
数据
库绪论 1、简述三层模式、两级映射,分别有什么作用? 模式(逻辑模式):是
数据
库中全体
数据
的逻辑结构和特征的描述,是
数据
库系统模式结构的中间层,即不涉及
数据
的物理存储细节,也与具体应用
程序
开发工具语言无关。 外模式(用户模式):是用户能看见和使用的局部
数据
的逻辑结构和特征描述,是与某一应用有关的
数据
的逻辑表示,是模式的子集,一个
数据
库可以有多个外模式。 内模式(存储模式):
数据
物理结构和存储方式的描述,是
数据
在
数据
库内部的表示方式,如存储方式是按照某个属性升序存储,什么索引等。 外模式模
进程间的通信
1进程间的通信 每个进程都有自己的地址空间,进程之间
不能
直接访问彼此,因此,进程之间的通信需要一个媒介,它就是内核,在内核开辟出一块缓冲区,P1进程把
数据
从用户空间拷贝到内核缓冲区,P2进程再把
数据
从内核缓冲区中读走。内核提供的这种机制称为进程间的通信。能够实现进程间的通信的方法有:信号(signal)、管道(pipe)、套接字(socket)和System V IPC机制。
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章