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转送就没问题了!
小弟的分数有限,不要建议。TCP/IP

解决方案 »

  1.   

    多增加LOG等,看程序死掉的时候是不是异常了,或者程序跑到什么位置了
      

  2.   

    你的程序基本没有错误处理, 发送是否成功都不判断.
    还有意外断开的情况什么的.
    还有一次发那么大, 也是不稳定因素之一.
    总之多做错误处理. TCP本身是稳定的, 其它要靠你自己来保证了
      

  3.   

    听了两位大哥的话有所感悟,呵呵! 先客气一下,谢谢在我的帖子里发言。输出到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发送的数据过大,网卡缓存数据冗余啊?  如何在程序里,通知网卡清零缓存。
      

  4.   

    请问您那个关于TCP数据发送稳定性的帖子中提到的问题是怎么解决的?我也碰到可能类似这个的问题了,谢谢