gpt4 book ai didi

java - 无法设置 datagramPacket 对象中缓冲区的偏移量

转载 作者:行者123 更新时间:2023-12-01 11:55:51 25 4
gpt4 key购买 nike

在java库中,http://download.java.net/jdk7/archive/b123/docs/api/java/net/DatagramPacket.html

我想使用此构造函数构造我的数据报包对象;

DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port)

这是我的代码:

      ByteArrayOutputStream outputStream = new ByteArrayOutputStream( );
outputStream.write( by); // by is a buffer that contains filename
outputStream.write(buffer); // buffer contains the actual data for the packet
byte combined[] = outputStream.toByteArray( );
System.out.println("combined length is "+combined.length);
sndPkt = new DatagramPacket(combined,by.length, combined.length, ip, portNum);


sendsocket.send(sndPkt);
Thread.sleep(1);

“by”是包含文件名的缓冲区。 “缓冲区”包含文件数据。我想将它们组合在一起并以一个数据包发送。但是,当我使用上述构造函数创建 DatagramPacket 对象时。我收到此错误消息:

   java.lang.IllegalArgumentException: illegal length or offset

当我将其更改为零时,不会报告任何错误,但我需要将偏移值设置为与文件名长度相同,以便我能够在服务器端获取它。谁能告诉我问题出在哪里?我可以通过将文件名作为第一个数据包发送到服务器,但现在我想将文件名嵌入到我发送的每个数据包中。这是执行此操作的标准方法吗?

最佳答案

offset + length 必须小于或等于缓冲区的长度,否则将会溢出。发送/接收的数据将从缓冲区中的offset开始,并运行lengthlong。

如果您在代码中使用offset=0,您确实会在每个数据包中发送文件名。但是,您在解析数据包时会遇到麻烦,因为您不知道收到的数据包中文件名的长度。例如,您可以在文件名和其余数据之间添加分隔符,并相应地解析数据包。

关于java - 无法设置 datagramPacket 对象中缓冲区的偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28450619/

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