我的程序里有这样类似的一段代码for(int i=0;i<100;i++)
{
       ...
       send(sock,SendData,Length,0);
       ...
}这样发了之后会造成SOCKET阻塞,以后接收和发送都不能了!WHY?

解决方案 »

  1.   

    这样造成阻塞后,双方都不能传送及接收数据不能判断是那一方先出现问题!(双方SOCKET的缓冲区是足够的,上面的那段程序结构也不允许修改)那位知道怎么样判断吗?谢谢各位了!!
      

  2.   

    问题核心是:当出现我上面所说的那种情况(程序不能再更改),应该怎么判断那一方的SOCKET先出现了故障?????
      

  3.   

    可能是send发送数据没有发送完全,第一次的数据和第二次的混在一起了
    你应该用循环发送的,直到发送Length长度。
    好像没有办法知道那端先阻塞了,要修改程序结构吧
      

  4.   

    我有Sniffer软件监视双方的SOCKET的接收与发送情况
    当客户方(就是上面我说的)连续发送一批数据时,服务方能接收并应答,但是客户方没有收到就答,用Sniffer查看服务方确实发出去了,但客户方就是没收到还有什么好的测试方法呀??
      

  5.   

    客户方没有收到应答========================================    没有收到应答显然是程序结构的问题,楼主应该开两个线程,两个socket,    一个发送,一个接受,否则通讯是会有问题的
      

  6.   

    for(int i=0;i<100;i++)
    {
           ...
           send(sock,SendData,Length,0);
           ...
    }可以这样计算这段程序产生流量:
    (Length * 8)/TimePeriod;像这样的For循环,可以产生的流量大约Length*8Mbps,如果你的带宽不够,程序肯定出问题!
      

  7.   

    如果不能该程序结构,尝试将Length的值改小!减少发生流量
      

  8.   

    好像依你们看是客户方SOCKET的问题!
    你们没有考虑过是服务方的SOCKET的问题吗?不过我自己还是赞同修改客户方的程序结构!!
      

  9.   

    To:yuanbocsut(打盹的神仙)     你是不是叫我控制发送的流量呀
        >>>>我现在不是改程序结构的问题,而是怎样找错误的问题<<<<
      

  10.   

    tcp吧!你没有收!tcp必须是可靠传输.收了以后回回穿能接收的窗口大小!你现在肯定窗口是0!你爪包可以看看.