Java 如何知道在多个节点之间的UDP连接中停止接收的位置

Java 如何知道在多个节点之间的UDP连接中停止接收的位置,java,udp,bytearray,datagram,Java,Udp,Bytearray,Datagram,我有一个应用程序,可以进行广播并从多个网络节点接收消息。我也编写了这些应用程序,所以我可以控制它们发送的内容和方式。在接收这些数据时,我需要分离每个节点的消息,以便将它们反序列化为我拥有的有意义的类。到目前为止,我通过保持每个客户端的每条消息大小相同(267字节)来解决这个问题。然而,这个解决方案显然是不正确的。我的另一个想法是在发送时将\0放在字节数组的末尾,这样我的应用程序就可以逐个接收数据报 有人能告诉我这个问题的正确心态吗 谢谢 编辑:问题不清楚: Udp.receivePacket(b

我有一个应用程序,可以进行广播并从多个网络节点接收消息。我也编写了这些应用程序,所以我可以控制它们发送的内容和方式。在接收这些数据时,我需要分离每个节点的消息,以便将它们反序列化为我拥有的有意义的类。到目前为止,我通过保持每个客户端的每条消息大小相同(267字节)来解决这个问题。然而,这个解决方案显然是不正确的。我的另一个想法是在发送时将\0放在字节数组的末尾,这样我的应用程序就可以逐个接收数据报

有人能告诉我这个问题的正确心态吗

谢谢

编辑:问题不清楚:

Udp.receivePacket(bindedPort, byteSize, discoveryTimeout);

在这里,我几乎同时收到来自多个主机的消息。因此,我想它们都堆在Udp缓冲区中。我认为为了一个接一个地接收数据报并防止破坏字节顺序和完整性,我需要知道要接收多少字节。我的问题是为了学习如何做到这一点。

您可以在传输完成时发送消息发送字符串结束,并在遇到字符串结束时签入服务器停止接收

不清楚实际问题是什么。UDP数据报已经由UDP实现分开保存,实现将告诉您接收的每个数据报中的字节数。您是对的。对不起。但你是对的。因此,当我给出接收字节大小时,它是否只是告诉接收函数要接收的最大数量?没错,通常是缓冲区的大小。那么,java或任何底层系统如何知道消息何时结束?是否用空字符或类似的字符标记?UDP数据报封装在IP数据报中。IP协议指定如何通过头字段(偏移量、长度和MF位)确定数据报的长度,并将其传递到UDP层。