【发布时间】:2015-08-13 12:12:52
【问题描述】:
我有一个 C++ 客户端,它在一定的时间间隔后向 Java 服务器应用程序发送一个大字符串(最小大小为 10 KB)。在此期间,c++ 应用程序会累积大量数据并将其完全发送到服务器。服务器也会一次性接收。
我想始终保持字符串变量的大小小于 string::max_size。一旦字符串的大小接近限制,我就会将该字符串发送到服务器并清除字符串,然后才继续收集剩余的数据。
如果字符串可以保存完整的数据,那么整个数据是否会从客户端传输到服务器而不会失败。(假设没有连接重置或出现任何其他此类问题。)
有人可以告诉我这是继续的方式吗?
【问题讨论】:
-
一般来说,是的。但是,
string::max_size非常大,以至于您可能会在达到该字符串大小之前很久就耗尽内存。但是,如果您设置其他一些更合理的限制 - 那就可以了。 -
如果您在 Windows 上,UDP/TCP 缓冲区的大小由注册表中的 TcpWindowSize 设置。见technet.microsoft.com/en-us/library/cc938219.aspx
-
@cup 默认尺寸。您可以使用
setsockopt()为每个套接字设置它。无需摆弄注册表。 -
@EJP 是的,但是如果 setsockopt 设置的大小大于注册表中的大小,则它在 windows 上不起作用。