首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据报数据包接收缓冲区大小-java

数据报数据包接收缓冲区大小-java
EN

Stack Overflow用户
提问于 2015-11-11 04:11:34
回答 1查看 4.1K关注 0票数 0

我尝试过接收固定缓冲区大小的数据报包,然后根据接收包来调整它。我可以得到接收到的数据包的实际缓冲区大小,但是当我用调整后的大小将它写入另一个缓冲区时,它会改变或再次增大其大小。这怎么可能。我希望它会将数组抛出绑定异常。

代码语言:javascript
复制
byte[] recvbuffer=new byte[1024];
byte[] databuf=new byte[k-8];
byte[] checksumbuf=new byte[8];

recvpacket[i]=new DatagramPacket(recvbuffer,recvbuffer.length);
sock.receive(recvpacket[i]);
System.out.println(new String(recvbuffer));//1

int k=recvpacket[i].getLength();//k=28
System.out.println(k);

byte[] buffer=new byte[k];//buffer of size 28
System.out.println(buffer.length);
buffer=recvbuffer;
//buffer=recvpacket[i].getData();
System.out.println(new String(buffer));//buffer of size 1024, but how?
System.out.println(buffer.length);//
EN

回答 1

Stack Overflow用户

发布于 2015-11-11 07:43:08

不要这样做。只需将其设置为最大的预期数据报大小加1。然后,如果您得到一个这样的大小,它是一个协议错误(并且可能更大)。

在处理接收到的DatagramPacket时,应该通过DatagramPacket.getLength().使用它的实际长度--例如,

代码语言:javascript
复制
System.out.println(new String(recvbuffer));//1

应该是

代码语言:javascript
复制
System.out.println(new String(recvpacket[i].data(), 0, recvpacket[i].getLength()));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33644159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档