Java 通过UDP发送多个对象实例

Java 通过UDP发送多个对象实例,java,object,network-programming,udp,Java,Object,Network Programming,Udp,我是java网络编程新手。 我尝试通过UDP发送多个名为Packet的对象实例。 发送方:将字符串更改为charArray,然后发送对象中的每个字符。 Receiver:接收Datagrampacket和readObject,然后将其打印出来。 发送方是可以的,但接收方只是获取对象的第一个实例,并将其打印为字符长度的倍。这是我的密码: 接受者 寄件人 假设我发送:abc 发件人: 接收人: RECIEVED: Packet: Type: data seqNo: 0 data: a R

我是java网络编程新手。 我尝试通过UDP发送多个名为Packet的对象实例。 发送方:将字符串更改为charArray,然后发送对象中的每个字符。 Receiver:接收Datagrampacket和readObject,然后将其打印出来。 发送方是可以的,但接收方只是获取对象的第一个实例,并将其打印为字符长度的倍。这是我的密码: 接受者

寄件人

假设我发送:abc 发件人:

接收人:

RECIEVED: Packet:   Type: data  seqNo: 0    data: a
RECIEVED: Packet:   Type: data  seqNo: 0    data: a
RECIEVED: Packet:   Type: data  seqNo: 0    data: a

问题是接收器打印出三个a。请帮我弄清楚。谢谢

要调试这类事情,使用tcpdump或类似工具跟踪网络上的实际情况会有所帮助:

$ tcpdump -i lo port 7777
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 65535 bytes
19:53:20.818460 IP zoo.59305 > zoo.7777: UDP, length 83
19:53:20.822292 IP zoo.59305 > zoo.7777: UDP, length 100
19:53:20.822410 IP zoo.59305 > zoo.7777: UDP, length 117
这表明您正在发送预期的3个数据包,但每个数据包比前一个数据包大17个字节,而不是所有数据包的大小都相同。仔细检查发送代码可以解释这一点-您使用单个ObjectOutputStream来构造数据包,并且不在数据包对象之间重置数据包,因此发送的第一个数据包包含第一个数据包对象,而第二个数据包包含两个数据包对象第一个数据包对象的副本,然后是scond数据包对象,第三个包含所有三个


在接收器端,您只解码接收到的数据包中的第一个数据包对象并打印它,因此您将第一个数据包对象打印三次…

要调试此类事情,请使用tcpdump或类似工具跟踪网络上的实际情况:

$ tcpdump -i lo port 7777
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 65535 bytes
19:53:20.818460 IP zoo.59305 > zoo.7777: UDP, length 83
19:53:20.822292 IP zoo.59305 > zoo.7777: UDP, length 100
19:53:20.822410 IP zoo.59305 > zoo.7777: UDP, length 117
这表明您正在发送预期的3个数据包,但每个数据包比前一个数据包大17个字节,而不是所有数据包的大小都相同。仔细检查发送代码可以解释这一点-您使用单个ObjectOutputStream来构造数据包,并且不在数据包对象之间重置数据包,因此发送的第一个数据包包含第一个数据包对象,而第二个数据包包含两个数据包对象第一个数据包对象的副本,然后是scond数据包对象,第三个包含所有三个

在接收方,您只解码接收到的数据包中的第一个数据包对象并打印它,所以您将第一个数据包打印三次

SENT: Packet:   Type: data  seqNo: 0    data: a
SENT: Packet:   Type: data  seqNo: 1    data: b
SENT: Packet:   Type: data  seqNo: 2    data: c
RECIEVED: Packet:   Type: data  seqNo: 0    data: a
RECIEVED: Packet:   Type: data  seqNo: 0    data: a
RECIEVED: Packet:   Type: data  seqNo: 0    data: a
$ tcpdump -i lo port 7777
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 65535 bytes
19:53:20.818460 IP zoo.59305 > zoo.7777: UDP, length 83
19:53:20.822292 IP zoo.59305 > zoo.7777: UDP, length 100
19:53:20.822410 IP zoo.59305 > zoo.7777: UDP, length 117