如何使用UDP读取接收器中存储在数据报包中的延迟
How to read the delay stored in the Datagram packet in the receiver using UDP
我正在使用 UDP 向我的接收器发送一个序列代码,现在我想测量发送和接收数据包之间的延迟。唯一的问题是我无法弄清楚如何从序列号后的数据包中读取我的延迟。
发件人
byte [] packetToSend = new byte[520];
int seqNo = 0;
while (seqNo < 100) {
try {
//Read in a audio data from the recorder
byte[] buffer = recorder.getBlock();
ByteBuffer header = ByteBuffer.allocate(524);
long sentMillis = System.currentTimeMillis();
header.put(buffer);
header.putInt(seqNo);
header.putLong(sentMillis);
//Make a DatagramPacket from it, with client address and port
number
DatagramPacket packet = new DatagramPacketheader.array(),
header.array().length, clientIP, PORT);
//Send it
sending_socket.send(packet);
接收者:
try {
byte[] buffer = new byte[520];
DatagramPacket packet = new DatagramPacket(buffer, 0, 520);
receiving_socket.receive(packet);
// int seqNo = ByteBuffer.wrap(buffer).getInt(512);
long sentMillis = ByteBuffer.wrap(buffer).getLong(508);
long receivedMillis = System.currentTimeMillis();
long delay = receivedMillis - sentMillis;
System.out.println(delay);
到目前为止,我得到像 1498894798102 这样的数字,我猜我是从 ByteBuffer.wrap 行中的错误索引读取的。
分配更大的 ByteBuffer
并继续使用各种 get()
(发送时 put()
)方法。失去所有 System.arraycopy()
电话。
我正在使用 UDP 向我的接收器发送一个序列代码,现在我想测量发送和接收数据包之间的延迟。唯一的问题是我无法弄清楚如何从序列号后的数据包中读取我的延迟。
发件人
byte [] packetToSend = new byte[520];
int seqNo = 0;
while (seqNo < 100) {
try {
//Read in a audio data from the recorder
byte[] buffer = recorder.getBlock();
ByteBuffer header = ByteBuffer.allocate(524);
long sentMillis = System.currentTimeMillis();
header.put(buffer);
header.putInt(seqNo);
header.putLong(sentMillis);
//Make a DatagramPacket from it, with client address and port
number
DatagramPacket packet = new DatagramPacketheader.array(),
header.array().length, clientIP, PORT);
//Send it
sending_socket.send(packet);
接收者:
try {
byte[] buffer = new byte[520];
DatagramPacket packet = new DatagramPacket(buffer, 0, 520);
receiving_socket.receive(packet);
// int seqNo = ByteBuffer.wrap(buffer).getInt(512);
long sentMillis = ByteBuffer.wrap(buffer).getLong(508);
long receivedMillis = System.currentTimeMillis();
long delay = receivedMillis - sentMillis;
System.out.println(delay);
到目前为止,我得到像 1498894798102 这样的数字,我猜我是从 ByteBuffer.wrap 行中的错误索引读取的。
分配更大的 ByteBuffer
并继续使用各种 get()
(发送时 put()
)方法。失去所有 System.arraycopy()
电话。