繁体   English   中英

Java UDP发送-一对一接收数据包

[英]Java UDP send - receive packet one by one

我正在尝试通过UDP发送和接收一些音频编码的数据,并且感到困惑。

首先,我之前已经在C#和node.js上完成了UDP发送-接收操作,并且一个接一个地接收数据包非常简单明了,但是在Java中却有所不同,这使我感到困惑。

每个编码数据的大小大约为360-380 bytes

并且我需要将此编码的数据作为数据包通过UDP 发送到远程(或到目前为止的localhost )。

UDP接收器应将已编码的数据作为数据包接收并进行解码。

这是一个简短的示例来说明我的工作。

编码器和UDP发送器

  ds = new DatagramSocket(localPort);
  //a Thread with While loop----------
  Log.d("AudioEncoder", outData.length + " bytes encoded");
  //The encoded data size is about 370 bytes for each

  packet = new DatagramPacket(outData, outData.length,
  InetAddress.getByName("127.0.0.1"), localPort);
  ds.send(packet);

UDP接收器和解码器

ds = new DatagramSocket(localPort);
byte[] buffer2 = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer2, buffer2.length);

while (isPlaying)
{
        ds.receive(packet); 
        Log.d("UDP-receiver",  buffer2.length + " bytes received");

        //do Decoding on buffer2
        //..........
}

基本上,每个数据包的大小(已编码字节数据)大约为360-380字节。

然后,对于Java Datagram ,我了解了为特定字节大小(例如512 or 1024创建缓冲区(我不知道在这种情况下以及最近这种情况下最优化的大小)。

如果我将DatagramPacket大小设置为1024 bytes ,则大小为360-380 bytes的数据包两次被放入缓冲池中,然后将原来的2个数据包连接在一起,然后作为一个字节数组处理?

如果我将DatagramPacket大小设置为512 bytes ,则大小为360-380 bytes的数据包两次进入缓冲池,然后由于缓冲区大小溢出,将到达的单个数据包刷卡进行处理?

同样,至少足够了,接收方可以一个接一个地接收一个数据包,然后对每个数据包进行处理,但是在这里看起来很复杂。

请指示我。 谢谢。

如果我将DatagramPacket的大小设置为1024字节,则大小为360-380字节的数据包两次被放入缓冲池中,然后将原来的2个数据包连接在一起,然后作为一个字节数组处理?

不。您会收到两个单独的数据包。

如果我将DatagramPacket的大小设置为512字节,则大小为360-380字节的数据包将两次存储在缓冲区中

没有。

那么由于缓冲区大小溢出,到达的单个数据包会被刷卡进行处理?

我不知道“刷卡”是什么意思,但是这些都没有发生。 您收到两个单独的数据包。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM