如果我们要传输大型的消息该怎么做呢
RECV函数
int MySocketRecv0(int sock, char* buf, int dateSize)
{
int numsRecvSoFar = 0; /已经接收的数据大小
int numsRemainingToRecv = dateSize; /剩余接收的数据大小
datesize表示要接受的数据大小,最开始剩余的大小就是要接收的大小
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;
}
这里的第一个if表示,如果已经接收的数据大小等于剩余接收的大小,就说明接收完毕
第二个if表示,如果已经接收的数据大于0,接收的数据一开始为0,就要加上已接受的数据,剩余接收的数据大小就等于它减去已接收的大小
else if ((bytesRead < 0) && (errno == EAGAIN))
{
continue;
}
else
{
return -1;
}
SEND函数
和recv函数基本一样
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/*flags*/);
if (bytesSend == numBytesRemainingToSend)
{
return 0;
}
else if (bytesSend > 0)
{
numBytesSentSoFar += bytesSend;
numBytesRemainingToSend -= bytesSend;
continue;
}
else if ((bytesSend < 0) && (errno == 11))
{
continue;
}
else
{
return -1;
}
}
}