请教: 关于TCP/IP接收数据Receive()

远志999 2012-05-14 09:02:59
现有一台主机作为客户端通过网线分别与4个设备相连

分别发送请求,然后接收响应,有什么方法使得效率最高?

目前我是这么做的,感觉特别慢,还有个问题,如果100M的带宽,读100个字节的数据,大概需要多少时间?

SendPackage03_ACQ()
{
//4个设备的数据在不停的更新,如果不及时读取数据,就会丢失其中的一部分
//一次将4个设备的数据全部读完,并且是依次对每个设备先发送请求,然后读其响应的数据
for(int i=0;i<4;i++)
{
send(i); //发送请求
sleep(30); //等待一段时间30ms
receive(i); //接收响应 ,对每个设备需要读取100多个字节的数据
}

这里当第一个数据交换完毕以后,有可能第二,三,四个设备,有的数据包已经不丢失。

}

while(1)
{
SendPackage() //发送请求;
Sleep(500); // 等待一段时间,发下一个数据包
}
...全文
327 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
stevenuserregister 2012-05-15
  • 打赏
  • 举报
回复
100M速率读100个字节,时间可以不计:100*8/1000000000≈0毫秒。
stevenuserregister 2012-05-15
  • 打赏
  • 举报
回复
做一个接收线程,在其中处理接收响应。
另外,不建议使用SLEEP函数,即便要等待指定时间,使用定时器更好。
向立天 2012-05-15
  • 打赏
  • 举报
回复
并发处理用IOCP好一些
  • 打赏
  • 举报
回复
创建四个线程分别处理四个设备的收发数据,
这样的话,也可以不Sleep(),直接receive,反正每个设备对应一个服务线程,就让它阻塞在这接收上面得了.
另外正如2楼所说,你100M的带宽,每次读100多个字节,流量和时间是可以忽略不计了.
islifeaes 2012-05-15
  • 打赏
  • 举报
回复
http://download.csdn.net/detail/islifeaes/4271481
在这个基础上做,不需要你处理网络上的事,只处理接收到数据后的事就可以
内部实现就是多线程实现的,来了数据后会自己调用你注册的处理函数的。
不需要你Sleep

这个东西支持网络实时通信和跨进程间的共享内存实时通信,也就是说这两种通信都已经替你完成了,你只要做上层的事即可

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧