服务器使用WSASendTo发送文件,客户端使用WSARecvFrom接收文件,为什么传输的时候客户端接收了8-10K左右就出现错误呢?(错误是:文件接收失败!);发送端(服务器):while(1)
{
if(0==file.Read(buf,BUFSIZE))
  
   break;


wsabuf.buf = buf;
wsabuf.len = sizeof(buf); if(SOCKET_ERROR==WSASendTo(pDlg->m_socketMul,&wsabuf,1,&dwSend,0,
             (SOCKADDR*)&(pDlg->m_addrMul),sizeof(SOCKADDR),NULL,NULL))
{
AfxMessageBox("文件发送失败");
    return -1; }

count +=dwSend;
}接收端(客户端):while(1)
{
wsabuf.buf = new char[BUFSIZE];
wsabuf.len = BUFSIZE; if(SOCKET_ERROR==WSARecvFrom(socket,&wsabuf,1,&dwRead,&dwFlag,
(SOCKADDR*)&addrFrom,&len,NULL,NULL))
{
MessageBox("文件接收失败!");  //提示这个错误!!
return -1;
}
if(0 == dwRead)
break;
file.Write(wsabuf.buf,dwRead); }难道是UDP不可靠连接的问题?
我是想实现发送文件组播的.WSARecvFromUDP组播接受错误

解决方案 »

  1.   

     wsabuf.buf = new char[BUFSIZE];
    每次用完要释放,否则内存泄露了。或者不要在while里面用new,很危险。
      

  2.   

    WSAGetLastError()看一下错误码wsabuf.buf = new char[BUFSIZE];内存泄漏了
    不用每次都new吧,放while外面
      

  3.   

    修改后的客户端,在接收到500k-1000K的时候仍然会出错,错误代码是10035查了一下也就是WSAEWOULDBLOCK,但是我仍然不知道问题出在哪里? wsabuf.buf = new char[BUFSIZE];
    wsabuf.len = BUFSIZE; CFile file(fileName,CFile::modeCreate|CFile::modeWrite);
    while(1)
    {
    if(SOCKET_ERROR==WSARecvFrom(socket,&wsabuf,1,&dwRead,&dwFlag,
    (SOCKADDR*)&addrFrom,&len,NULL,NULL))
    {
    DWORD err=GetLastError();
        CString str;
        str.Format("%d",err);
    MessageBox("文件接收失败!错误代码"+str);
    return -1;
    }
    if(0 == dwRead)
    break;
    file.Write(wsabuf.buf,dwRead);
        file.Flush();
    }
    delete wsabuf.buf;
    file.Close();也按照http://blog.sina.com.cn/s/blog_67e3aa0a0100tji5.html的方法,尝试 Sleep 一段时间,仍是不行?