tcp长时间传送数据的稳定性

gxl 2013-04-13 04:59:47
tcp局域网发送数据 速度在750bk左右 为什么程序执行10中左右就会死掉 程序不在发送和接受数据了!

发送代码如下:

char msg[50688];

int dd=0,cc=0;////接受
while(cc<50688)
{
dd=Receive(pd->msg+cc,50688-cc);
cc=cc+dd;
}

int dd=0,cc=0;////发送
while(cc<50687)
{
dd=Sand(pd->msg+cc,50688-cc);
cc=cc+dd;
}

各位大哥有谁做过tcp或者udp的,帮忙解说一下,为什么程序长时间运行会有问题,是不是程序换成udp转送就没问题了!
小弟的分数有限,不要建议。
...全文
353 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
calf1987119 2013-07-01
  • 打赏
  • 举报
回复
请问您那个关于TCP数据发送稳定性的帖子中提到的问题是怎么解决的?我也碰到可能类似这个的问题了,谢谢
gxl 2013-04-19
  • 打赏
  • 举报
回复
问题终于解决啦!!呵呵
菜牛 2013-04-15
  • 打赏
  • 举报
回复
不要建议?那算了。
gxl 2013-04-15
  • 打赏
  • 举报
回复
为什么不要建议啊!!有好的建议请不要吝惜,谢谢
gxl 2013-04-14
  • 打赏
  • 举报
回复
听了两位大哥的话有所感悟,呵呵! 先客气一下,谢谢在我的帖子里发言。 输出到Log文件是一种非常强大的调试方法。可惜小弟目前还没用过,要先学一下! 判断发送和接受是否成功: 我在原来的代码上,没接受一次,都判断Receive()函数的返回值是否大于0; dd=0; cc=0; while(cc<50688) { dd=Receive(pd->ok+cc,50688-cc); if(dd<1) { pd->MessageBox("rev false!"); } cc=cc+dd; } 可是程序出错时,没有MessageBox的对话框弹出! 这些代码是写在void CMyLsn::OnReceive(int nErrorCode)里的。是接受发来是每一帧视频数据的函数。 (class CMyLsn : public CSocket) CMyLsn继承CSocket。 视频的一帧大小是50688。 今天突然发现程序在win7 和xp 下运行有些不同! win7下 程序运行10分钟左右死掉; xp下第一次运行10秒就死,运行完第一次之间运行第二次可能不到5秒死; 是不是因为tcp发送的数据过大,网卡缓存数据冗余啊? 如何在程序里,通知网卡清零缓存。
xiaohuh421 2013-04-13
  • 打赏
  • 举报
回复
你的程序基本没有错误处理, 发送是否成功都不判断. 还有意外断开的情况什么的. 还有一次发那么大, 也是不稳定因素之一. 总之多做错误处理. TCP本身是稳定的, 其它要靠你自己来保证了
oyljerry 2013-04-13
  • 打赏
  • 举报
回复
多增加LOG等,看程序死掉的时候是不是异常了,或者程序跑到什么位置了

18,357

社区成员

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

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