大文件接收
因为演示不方便 所以 我只给出关键代码 其他小东西,读者自己解决,或者私信我。
// recv 的改造 让他可以循环接收 就是为了大数据传输
int MySocketRecv0(int sock, char* buf, int dateSize)
{
//循环接收
int numsRecvSoFar = 0;//目前收到的数据
int numsRemainingToRecv = dateSize;//剩余要收的数据
printf("enterMySocketRecv0\n");
while (1)
{
int bytesRead = recv(sock, &buf[numsRecvSoFar], numsRemainingToRecv, 0);
printf("###bytesRead = %d, numsRecvSoFar = %d, numsRemainingToRecv = %d\n", bytesRead, numsRecvSoFar, numsRemainingToRecv);
if (bytesRead == numsRemainingToRecv) //接受的数据的大小和还要接受的数据的大小 一样接收完毕
{
return 0; //接收完毕
}
else if (bytesRead > 0)
{
numsRecvSoFar += bytesRead;
numsRemainingToRecv -= bytesRead;
continue;
}
else if ((bytesRead < 0 ) && (ERROR == EAGAIN))
{
continue;
}
else
{
return -1;
}
}
}
大文件发送
//send的改造 传输大数据的
int MySocketSend0(int socketNum, unsigned char* data, unsigned dataSize)
{
unsigned numBytesSentSoFar = 0;
unsigned numBytesRemainingToSend = dataSize;
while (1)
{
int bytesSend = send(socketNum, (char const*)(&data[numBytesSentSoFar]), numBytesRemainingToSend, 0);
if (bytesSend==numBytesRemainingToSend)
{
return 0;
}
else if(bytesSend>0)
{
numBytesSentSoFar += bytesSend;
numBytesRemainingToSend -= bytesSend;
continue;
}
else if((bytesSend < 0) && (ERROR == EAGAIN))
{
continue;
}
else
{
return -1;
}
}
}