gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:42:36 25 4
gpt4 key购买 nike

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

提前致谢

最佳答案

这一切的意义在于:

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

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

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

请注意,发送者的 DatagramPacket 本身并没有通过网络传输,发送者的字节数组也没有通过网络传输。

关于java - 数据包的 getOffset() 在接收端返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16286568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com