高手帮帮忙,小弟我做了一个Tcp/ip文件传输程序,开了十个线程。传输小文件可以正确传输,大文件就出错
高手帮帮忙,我做了一个Tcp/ip文件传输程序,开了十个线程。传输小文件可以正确传输,大文件就出错
,我做了一个Tcp/ip文件传输程序,开了十个线程。传输小文件可以正确传输,大文件服务器就出错。是不是传输大文件还要加上什么东西
server端
while(i <10)
{
sockSrvr.Accept(pSockConnection[i]);
AfxBeginThread(SendThread,¶m[i]);
i++;
}
UINT SendThread(LPVOID pParam)
{
FILEINFO fileinfo;
Param *pFileInfo=(Param*)pParam;
int fileLen=pFileInfo-> filelen;
CSocket *pSockconnection=pFileInfo-> pSockcon;
int seek=pFileInfo-> seek;
int totalLen=pFileInfo-> totalLen;
int cbLeftToSend=pFileInfo-> filelen,readLen = 0;
fileLen=htonl(fileLen);
fileinfo.fileLen=fileLen;
fileinfo.seek=htonl(seek);
fileinfo.totalLen=htonl(totalLen);
pSockconnection-> Send(&fileinfo,sizeof(FILEINFO));
TRACE( "Thread : %d-The File Seek :%d-File Length :%d\r\n ",hThread++, seek, pFileInfo-> filelen);
sendFile.Seek(seek,CFile::begin);
BYTE buffer[4096];
int SendSucc=0;
int count=0;//test
while (TRUE)
{
if (cbLeftToSend > = 4096)
{
readLen = sendFile.Read(buffer,4096);
SendSucc=pSockconnection-> Send(buffer,readLen);
cbLeftToSend -=readLen;
}
else
{
readLen = sendFile.Read(buffer,cbLeftToSend);
SendSucc=pSockconnection-> Send(buffer,readLen);
break;
}
if ( SendSucc == SOCKET_ERROR )
break;
}
return 0;
}
------解决方案--------------------
你不做任何的检查,而且没有校验啊,不要把网络想得那么理想化
------解决方案--------------------
socket发送 是有数据大小限制的。默认大小我记不清楚了。
你需要设置一下。需要把大文件分割成很多数据包然后发送。
,我做了一个Tcp/ip文件传输程序,开了十个线程。传输小文件可以正确传输,大文件服务器就出错。是不是传输大文件还要加上什么东西
server端
while(i <10)
{
sockSrvr.Accept(pSockConnection[i]);
AfxBeginThread(SendThread,¶m[i]);
i++;
}
UINT SendThread(LPVOID pParam)
{
FILEINFO fileinfo;
Param *pFileInfo=(Param*)pParam;
int fileLen=pFileInfo-> filelen;
CSocket *pSockconnection=pFileInfo-> pSockcon;
int seek=pFileInfo-> seek;
int totalLen=pFileInfo-> totalLen;
int cbLeftToSend=pFileInfo-> filelen,readLen = 0;
fileLen=htonl(fileLen);
fileinfo.fileLen=fileLen;
fileinfo.seek=htonl(seek);
fileinfo.totalLen=htonl(totalLen);
pSockconnection-> Send(&fileinfo,sizeof(FILEINFO));
TRACE( "Thread : %d-The File Seek :%d-File Length :%d\r\n ",hThread++, seek, pFileInfo-> filelen);
sendFile.Seek(seek,CFile::begin);
BYTE buffer[4096];
int SendSucc=0;
int count=0;//test
while (TRUE)
{
if (cbLeftToSend > = 4096)
{
readLen = sendFile.Read(buffer,4096);
SendSucc=pSockconnection-> Send(buffer,readLen);
cbLeftToSend -=readLen;
}
else
{
readLen = sendFile.Read(buffer,cbLeftToSend);
SendSucc=pSockconnection-> Send(buffer,readLen);
break;
}
if ( SendSucc == SOCKET_ERROR )
break;
}
return 0;
}
------解决方案--------------------
你不做任何的检查,而且没有校验啊,不要把网络想得那么理想化
------解决方案--------------------
socket发送 是有数据大小限制的。默认大小我记不清楚了。
你需要设置一下。需要把大文件分割成很多数据包然后发送。