1

我有一个冗长的文本文件,我试图在 localhost 上通过 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服务器?

提前致谢

4

1 回答 1

0

这一切的意义在于:

  1. 在发送方,您DatagramPacket使用源数组的字节 500..BYTES_PER_PACKET-500 创建了一个。

  2. 你发送了数据包。它作为 UDP 数据报通过网络传输。它以 UDP 数据报的形式到达。

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

请注意,发送者DatagramPacket本身并没有通过线路,发送者的字节数组也没有。

于 2013-04-30T01:28:42.897 回答