【问题标题】:getOffset() of a packet returns 0 on the receiver's end数据包的 getOffset() 在接收端返回 0
【发布时间】:2013-04-29 19:22:48
【问题描述】:

我有一个冗长的文本文件,我正试图在 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);

打印语句返回 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?

提前致谢

【问题讨论】:

    标签: java udp datagram


    【解决方案1】:

    这一切的意思是:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-25
      • 1970-01-01
      • 1970-01-01
      • 2021-09-30
      • 1970-01-01
      相关资源
      最近更新 更多