【发布时间】:2012-02-14 11:04:44
【问题描述】:
static void HandlePackets(void* pParams)
{
int iResult = 0;
char recvbuf[MAX_PACKET_LENGTH];
printf("Packet handling started\n");
while((iResult = recv(lhSocket, recvbuf, MAX_PACKET_LENGTH, 0)) > 0)
printf("Bytes received: %d\n", iResult);
printf("Packet handling stopped with reason %i", WSAGetLastError());
}
目前,它只打印接收到的字节数。
会不会发生这样的事情,recv 只会收到一半的数据包?或者一个完整的数据包和下一个数据包的一半,如果服务器快速发送它们?
例如,服务器发送了一个长度为 512 字节的数据包,recv 是否有可能首先获得 500 字节,然后第二次尝试接收剩余的 12 字节?
如果服务器发送大量每个长度为 512 字节的数据包,recv 是否有可能从第一次执行获得 700 个字节,而从第二次执行剩余的字节?
MAX_PACKET_LENGTH 是 1024
(我这里说的是应用层数据包,不是传输层。)
整个问题是——我是否需要让客户端有可能将接收到的字节组合成一个数据包或将过度接收的字节拆分到不同的数据包?
【问题讨论】:
-
那么在 winsock2.h 中的 recv 函数是什么?
-
我对格式化一无所知。或者这些东西在歌剧中不起作用
-
好的。下次我会试试的:D
-
这里最大的问题是TCP、UDP还是SCTP。在 TCP 中:可能,在 UDP/SCTP 中不是。
标签: c++ sockets count byte recv