簡體   English   中英

如何在Java UDP中獲取實際的包大小`byte []`數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM