Java的UDP发送 - 通过一个接收数据包一个(Java UDP send - receive p

2019-10-19 08:56发布

我试图发送和通过UDP和困惑接受一些音频编码数据。

首先,我已经做了UDP C#和Node.js的前发送 - 接收,在接收到数据包逐一是非常简单和容易的,但它在Java的不同,混淆了我。

的每一个编码的数据大小是大约360-380 bytes的每个,

我需要经由UDP 作为分组发送该编码的数据到远程(或迄今本地主机 )。

了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个分组joind在一起,然后作为一个单一字节数组处理?

如果我设置了DatagramPacket大小512 bytes ,其大小是包360-380 bytes来两次到缓冲区汇集,然后因为它是溢出的缓冲区大小,单个数据包到达刷卡要处理?

再次,这是足够的,至少,接收器可以通过一个接收数据包1,那么对于每一个进程,但事情看起来在这里复杂。

请指导我。 谢谢。

Answer 1:

如果我设置DatagramPacket的大小为1024个字节,这是大小字节360-380中的缓冲器来两次汇集的分组,则原来的2个分组joind在一起,然后作为一个单一字节数组处理?

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

如果我设置DatagramPacket的大小为512个字节,这是大小字节360-380的包是两次以在缓冲器被汇集

没有。

然后因为它溢出的缓冲区大小,抵达刷卡单包被处理?

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



文章来源: Java UDP send - receive packet one by one