1.用研华的数据采集卡1711L,中断方式单路采集数据,采集非常稳定。
2.另外用Winsock API写了个通信程序,采用的是SOCK_STREAM协议,服务器端选的是异步方式,WSAAsyncSelect(ConnectClient,m_hWnd,WM_READCLOSE,FD_READ|FD_CLOSE); 服务器每次收到数据,都立即显示出来。为了提高通信速度,我放弃了Nagle算法,
int bNodelay = 1; 
int err; 
err = setsockopt( 
sConnect, 
IPPROTO_TCP, 
TCP_NODELAY, 
(char *)&bNodelay, 
sizoeof(bNodelay));
要求没10ms通信一次,用的是多媒体定时器。程序写好后,运行非常稳定,我试过一个小时,感觉不到延迟,并且没有阻塞,没有丢点(我发送和接收都有记录)。3.于是,我把两个程序写到一起(通信的服务器不变,把采集程序和通信的客户端程序集成起来),问题出现了,结果通信一小段时间后,服务器段接收不到数据,而客户段再过一段时间后报告block。请问问题出在哪里?该怎么解决?谢谢各位大侠了。

解决方案 »

  1.   

    我问题没有说清楚:
    第3点中报告block是我程序中检测到阻塞自己报告出来的。我试过采集部分用伪函数,通信10分钟没有任何问题;单独数据采集也没有问题。只是集成后,通信就不行了,但是采集仍然进行。
      

  2.   

    应该不是内存操作问题,send()的时候会等待服务端一个ACK回来,如果等待过程中被采集程序中断,大概会导致异常吧。做过此类问题的发言啊。
      

  3.   

    有可能产生了SOCKET_ERROR,处理得时候过于武断了
      

  4.   

    程序里有没有象waitforsignalobject这样的api
    有的话改成while试试
      

  5.   

    你试试release版我的问题好像和你有点类似
    我的结构是这样的采集服务器
    网络管理服务器
    网络播放器采集段采集数据然后发送给管理服务器,管理服务器在发送给播放器,如果都单独的没有问题
    采集服务器---网络管理服务器网络管理服务器--网络播放器 但是一联调就出问题,是网络客户端关闭的时候,管理服务器,采集服务器会出现错误,说socket句柄由问题,但是如果是release版就很少出现,至少到目前我还没有侧出来,为什么在debug下面会出现呢??