服务器端代码
CFile myFile;
myFile.Open("D:\\test.txt", CFile::modeRead | CFile::typeBinary);
int myFileLength = myFile.GetLength(); // Going to send the correct File Size
sockRecv.Send(&myFileLength, 4); // 4 bytes long
byte* data = new byte[myFileLength];
myFile.Read(data, myFileLength);
//sockRecv.Send(data, myFileLength); //Send the whole thing now
for(int i=0;i<=myFileLength;i+=1024)
{
sockRecv.Send(data+i,1024); //Send the whole thing now
Sleep(10);
}
if(myFileLength%1024!=0)
sockRecv.Send(data+myFileLength-myFileLength%1024,myFileLength%1024);
CFile myFile;
myFile.Open("D:\\test.txt", CFile::modeRead | CFile::typeBinary);
int myFileLength = myFile.GetLength(); // Going to send the correct File Size
sockRecv.Send(&myFileLength, 4); // 4 bytes long
byte* data = new byte[myFileLength];
myFile.Read(data, myFileLength);
//sockRecv.Send(data, myFileLength); //Send the whole thing now
for(int i=0;i<=myFileLength;i+=1024)
{
sockRecv.Send(data+i,1024); //Send the whole thing now
Sleep(10);
}
if(myFileLength%1024!=0)
sockRecv.Send(data+myFileLength-myFileLength%1024,myFileLength%1024);
byte* data = new byte[dataLength];
//sockClient.Receive(data, dataLength); //Get the whole thing
for(int i=0;i<=dataLength;i+=1024)
sockClient.Receive(data+i,1024); //Get the whole thing now
if(dataLength%1024!=0)
sockClient.Receive(data+dataLength-dataLength%1024,dataLength%1024);接受的数据写入文件后并不正确
我实际读写的是个.exe文件,代码中暂且就用的txt文件代替
程序也无法设置断点
保证读文件部分代码是正确的,如果哪位有代码能否发到.cn
必须是能传送大文件的哦http://www.codeproject.com/internet/SocketFileTransfer.asp这个是我参考的文章
http://topic.csdn.net/t/20021011/08/1086665.html#
nDWORD CSocket::RecvTCP( void* pBuffer , DWORD dwLength , DWORD dwFlags )
{
long lCurRecv =0;
while( 1 )
{
int iTemp = recv( socket , ( nPCHAR )pBuffer+lCurRecv , ( nINT )dwLength , ( nINT )dwFlags );
if( iTemp == SOCKET_ERROR )
{
int iError = WSAGetLastError();
if( iError != WSAEWOULDBLOCK )
return FALSE;
}
else
{
lCurRecv+= iTemp;
dwLength -= iTemp;
if( 0 == dwLength )
break;
}
}
return TRUE;
}// 发送数据
nDWORD CSocket::SendTCP( void* pBuffer , DWORD dwLength , DWORD dwFlags )
{
long lCurSend = 0;
while (1)
{
int iTemp = send( socket , ( nPCHAR )pBuffer+lCurSend , ( nINT )dwLength , ( nINT )dwFlags ); if( iTemp== SOCKET_ERROR )
{
if( WSAGetLastError() != WSAEWOULDBLOCK )
return FALSE;
}
else
{
lCurSend +=iTemp;
dwLength -= iTemp;
if( 0 == dwLength )
break;
}
}
return TRUE;
}
{
while(sockRecv.Send(data+i,1024)!=1024)
{}
Sleep(10);
}
发不了大文件,我的程序就是在他的基础上改的
简洁明了 UINT dwRead=0;
while(dwRead<StreamFileInfo.nFileSizeLow)
{
byte* data = new byte[1024];
UINT dw=myFile.Read(data, 1024);
sockRecv.Send(data, dw);
dwRead+=dw;
delete [] data;
}