数据包的getOffset()在接收方端返回0

时间:2013-04-29 19:22:49

标签: java udp datagram

我有一个冗长的文本文件,我试图通过本地主机上的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个?

提前致谢

1 个答案:

答案 0 :(得分:0)

所有这一切的意思是:

  1. 在发件人处,您使用源数组的字节500..BYTES_PER_PACKET-500创建了DatagramPacket

  2. 您发送了数据包。它作为UDP数据报通过线路。它作为UDP数据报到达。

  3. 在接收器上,您构造了一个新的字节数组,并在其周围构造了一个新的DatagramPacket,指定offset = 0,或者没有偏移参数。您收到了DatagramPacket. Java,将UDP数据报放入DatagramPacket,的字节数组中,从您指定的偏移量开始:零。

  4. 请注意,发件人的DatagramPacket本身并不会通过网络传输,也不会传输发件人的字节数组。