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