【发布时间】:2012-03-29 06:31:13
【问题描述】:
我正在使用 C++ 在 Linux 中开发客户端服务器应用程序 (TCP)。我想同时发送超过65,000 字节。在 TCP 中,最大数据包大小仅为 65,535 字节。
我怎样才能无损地发送整个字节?
以下是我在服务器端的代码。
//Receive the message from client socket
if((iByteCount = recv(GetSocketId(), buffer, MAXRECV, MSG_WAITALL)) > 0)
{
printf("\n Received bytes %d\n", iByteCount);
SetReceivedMessage(buffer);
return LS_RESULT_OK;
}
如果我使用MSG_WAITALL 接收字节需要很长时间,那么如何设置标志以一次接收超过 100 万字节。
编辑:MTU 大小为 1500 字节,但 TCP 数据包大小的绝对限制为 65,535。
【问题讨论】:
-
TCP 旨在隐藏 IP 数据包大小作为传输的实现细节。路由器可以拆分数据包并以其他方式处理它们。您确定要依靠一个巨大的 100KB 数据包通过网络而不被切断吗?
-
TCP 是流协议,不要试图把它当作固定大小的数据包。接收尽可能多的字节,处理它们 - 你越早学会接受这是如何处理 TCP,你就会越快乐:-)
-
“十万字节”是什么意思?
-
我需要向服务器发送超过 1000000 个字节,当我发送 65,635 或 100000 个字节时,它工作正常,如果我发送的超过这个,我的数据就会丢失......那么如何我可以处理吗
标签: c++ linux sockets tcp serversocket