服务器使用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组播接受错误
{
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组播接受错误
每次用完要释放,否则内存泄露了。或者不要在while里面用new,很危险。
不用每次都new吧,放while外面
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 一段时间,仍是不行?