我有一个冗长的文本文件,我试图通过本地主机上的UDP传输,所以我必须分解字节缓冲区以便在数据包中发送文件。
我遇到的问题是:
在服务器端,我将带有偏移量的数据包发送到字节缓冲区设置为500:
byte[] buf = text.getBytes();
InetAddress address = InetAddress.getByName("localhost");
DatagramPacket packet = new DatagramPacket(buf, 500, BYTES_PER_PACKET, address, udp_port_num);
System.out.println("Offset at server: " + packet.getOffset());
udpSocket.send(packet);
print语句返回500的预期答案。
然后在客户端:
byte[] buf = new byte[BYTES_PER_PACKET];
DatagramPacket packet = new DatagramPacket(buf, BYTES_PER_PACKET);
udpSocket.receive(packet);
String received = new String(packet.getData());
System.out.println(received);
System.out.println("Offset: " + packet.getOffset());
它从接收到的文件的偏移量打印正确的文本,但是packet.getOffset()总是返回0.为什么它不从服务器返回相同的500和/或如何让它返回来自服务器的500个?
提前致谢
答案 0 :(得分:0)
所有这一切的意思是:
在发件人处,您使用源数组的字节500..BYTES_PER_PACKET-500创建了DatagramPacket
。
您发送了数据包。它作为UDP数据报通过线路。它作为UDP数据报到达。
在接收器上,您构造了一个新的字节数组,并在其周围构造了一个新的DatagramPacket
,指定offset = 0,或者没有偏移参数。您收到了DatagramPacket.
Java,将UDP数据报放入DatagramPacket,
的字节数组中,从您指定的偏移量开始:零。
请注意,发件人的DatagramPacket
本身并不会通过网络传输,也不会传输发件人的字节数组。