用WSAAsyncSelect(m_socket,m_hWnd,SERVER_MESSAGE,FD_WRITE|FD_ACCEPT|FD_READ|FD_CLOSE)非阻塞发送文件出错客户端发送代码int filesize;
CFile file(filename, CFile::modeRead);
filesize = (int)file.GetLength();

char buff[1024];
while(filesize > 0)
{
int read_len = file.Read(buff, sizeof(buff));
int send_len = send(wparam, buff, read_len, 0);
filesize = filesize - send_len;
} file.Close();
服务端接收代码 CFile file;
file.Open(filename, CFile::modeCreate|CFile::modeWrite); char buff[1024];
while(filesize > 0)
{
int recv_len = recv(m_socket_client, buff, sizeof(buff), 0);
file.Write(buff, recv_len);
filesize = filesize - recv_len;
} file.Close();

解决方案 »

  1.   

    楼主说的太模糊了,得把错误码记录一下,send和recv的时候
    还有,既然用异步模式,就要在FD_READ消息来得时候再读取数据
    楼主贴得代码也比较少,不知道用的UDP还是TCP?
      

  2.   

    是用TCP传输的 能不能在接收文件的时候把异步模式改为同步模式 这样就可以连续的接收数据了
      

  3.   

    while(filesize > 0)
    {
          int read_len = file.Read(buff, sizeof(buff));
          int send_len = send(wparam, buff, read_len, 0);
          filesize = filesize - send_len;
    }显然就是这里有错误了,如果send_len<read_len,那么你的文件数据就丢失了,那下次循环时,你应该先调用Seek方法进行文件操作位置的调整
      

  4.   

    还有就是你得保证两边的filesize 值是一样的
      

  5.   

    filesize是一样的 问题好像是出在异步模型上面