我用socket 发送文件,代码主要如下:
发送端:
nCount = nFileSize / nBuffSize; 
WSAEventSelect( mySocket, hEvent,FD_WRITE);
for( i = 0; i < nCount-1; i++)
{
   WSAWaitForMultipleEvents(1, lphEvents, false, WSA_INFINITE, false);
   pFile->Read(pBuff, nBuffSize);
   send(mySocket, pBuff, nBuffSize ,0);
   WSAResetEvent(hEvent);
}
//发送文件最后一段
WSAWaitForMultipleEvents(1, lphEvents, false, WSA_INFINITE, false);
pFile->Read(pBuff, nFileSize % nBuffSize);
send(mySocket, pBuff, nFileSize % nBuffSize ,0);
WSAResetEvent(hEvent);
接收端和发送端类似,用的是FD_ACCEPT
我现在的问题是我的发送端发送一次之后就陷入等待,再也不发送数据。
第一次发送完之后FD_WRITE状态为什么不再出现?FD_WRITE不是指可以写入发送缓冲的状态吗?

解决方案 »

  1.   

    这个问题我也遇到过,FD_WRITE状态不灵,但我绝得发送端直接发送决可以了,不必用这样
    接收端这样做应该没问题
      

  2.   

    我试了下,发送端持续发送,接收端等待FD_READ事件来读数据,接收端丢了很多数据。
    我急啊
      

  3.   

    把 WSAWaitForMultipleEvents(1, lphEvents, false, WSA_INFINITE, false);
    放到for循环外面
      

  4.   

    ->yanhuahui(眼发黑) :
    事件只触发一次,这是什么意思?
    请指点。