[英]How to obtain the actual packet size `byte[]` array in Java UDP
這是我上一個問題的后續問題: Java UDP發送 - 逐個接收數據包
正如我在那里指出的那樣,基本上,我希望通過UDP逐個接收數據包。
這是一個示例代碼:
ds = new DatagramSocket(localPort);
byte[] buffer1 = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer1, buffer1.length);
ds.receive(packet);
Log.d("UDP-receiver", packet.getLength()
+ " bytes of the actual packet received");
這里,實際的數據包大小是300字節,但buffer1
被分配為1024字節,對我來說,處理buffer1
是錯誤的。
如何從這里獲取實際的數據包大小byte[]
數組?
而且,更根本的是,為什么我們需要預先分配緩沖區大小來接收Java中的UDP數據包? (node.js不這樣做)
有沒有辦法不預先分配緩沖區大小並直接接收UDP數據包?
謝謝你的想法。
你已經回答了自己的問題。 packet.getLength()
返回接收數據報中的實際字節數。 所以,你只需要使用索引0
buffer[]
來索引packet.getLength()-1.
請注意,這意味着如果您在循環中調用receive()
,則必須每次在循環周圍重新創建DatagramPacket
,或者在接收之前將其長度重置為最大值。 否則getLength()
會縮小到目前為止收到的最小數據報的大小。
自我回答。 我做了如下:
int len = 1024;
byte[] buffer2 = new byte[len];
DatagramPacket packet;
byte[] data;
while (isPlaying)
{
try
{
packet = new DatagramPacket(buffer2, len);
ds.receive(packet);
data = new byte[packet.getLength()];
System.arraycopy(packet.getData(), packet.getOffset(), data, 0, packet.getLength());
Log.d("UDPserver", data.length + " bytes received");
}
catch()//...........
//...........
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.