我通过互联网上的TCP将点的坐标发送到可视化的客户端脚本。我想知道我应该使用哪个选项:
我不知道哪一个更快。我也有其他一些问题:
string
的最大大小client.send(string)
)很抱歉有很多问题,但我真的很难解决这个问题......
答案 0 :(得分:0)
发送字符串时,可能会在多个TCP数据包中发送。如果您发送多个字符串,它们可能都会在一个TCP数据包中发送。您没有接触到数据包,TCP套接字只是一个恒定的数据流。不要指望对recv()
的每次通话都与send()
的一次通话配对,因为事实并非如此。您可以发送"abcd"
和"efg"
,也可以从"a"
开始阅读"bcde"
,"fg"
和recv()
。
最好在收到数据后立即发送数据,以便网络堆栈尽可能快地提供有关您发送内容的信息。它将确切地决定做什么。您可以根据需要发送大字符串,如果需要,它将被分解为通过电线发送。全部自动。
由于在TCP中你不处理数据包,丢包等事情也不是你的问题。这些都是自动处理的 - 数据最终会通过,或者连接关闭。
至于UDP - 你可能不想要UDP。 :)
答案 1 :(得分:0)
UDP的最大理论数据包大小为65535,实际上这个大小要低得多,取决于操作系统和路由硬件。 UDP没有任何确保数据传输的机制,如果没有一些手工制作的数据保护机制,这会使它更快但不可靠。
TCP,您不必担心数据包大小,如果您尝试发送更大的数据块,则可以由操作系统自动和透明地为您分割。由于TCP通信的开销,发送小块数据可能效率低下,但即使在这里,默认情况下您在大多数操作系统上都启用了Nagle算法(参见Nagle's algorithm)。该算法基本上尝试加入小块数据,对于大多数情况来说,这是快速有效的。