[英]java udp packet merging
I've got a strange problem while practising with UDP in Java. 在Java中使用UDP练习时遇到一个奇怪的问题。 If I send multiple UDP handshake packets of different data lengths between servers, the UDP packets merge. 如果我在服务器之间发送多个具有不同数据长度的UDP握手数据包,则UDP数据包将合并。 I'm using a timer to send the handshakes between the servers. 我正在使用计时器在服务器之间发送握手。
public class UDPtest {
public static UDPtest test = new UDPtest();
public static byte[] buffer = new byte[1024];
public static InetAddress host = null;
Timer timer = new Timer();
TimerTask ttimer = new TimerTask() {
public void run() {
//System.out.println("time");
}
};
public static void main(String args[]) throws Exception {
DatagramSocket sendSocket = new DatagramSocket();
DatagramSocket receiveSocket = new DatagramSocket(Integer.parseInt(args[1]));
String s = "SEND "+args[0];
host = InetAddress.getByName("localhost");
buffer = s.getBytes();
DatagramPacket handshake = new DatagramPacket(buffer, buffer.length, host, Integer.parseInt(args[2]));
test.RouteTimer(receiveSocket,handshake);
while (true) {
DatagramPacket receivePacket = new DatagramPacket(buffer,buffer.length);
receiveSocket.receive(receivePacket);
String receiveString = new String(receivePacket.getData());
if (receiveString.substring(0,1).matches("A")) {
System.out.println(receiveString);
continue;
}
else {
System.out.println(receiveString);
String temp = "A "+args[0];
buffer = temp.getBytes();
DatagramPacket sendPacket = new DatagramPacket(buffer, buffer.length, host, Integer.parseInt(args[2]));
sendSocket.send(sendPacket);
}
}
}
public void RouteTimer(final DatagramSocket socket, final DatagramPacket handshake) {
Timer timer = new Timer();
TimerTask ttimer = new TimerTask() {
@Override
public void run() {
try {
socket.send(handshake);
}
catch (Exception e) {
}
}
};
timer.scheduleAtFixedRate(ttimer, 1000, 5000);
}
}
For example: If I have server X and Y, the expected output for server X would be: 例如:如果我有服务器X和Y,则服务器X的预期输出将是:
SEND X 传送X
AX 斧头
SEND X 传送X
AX 斧头
but the output becomes: 但输出变为:
SEND Y 送Y
AY AY
SEN 森
AY AY
I'm trying to understand why this happens, and how to fix the problem. 我试图了解为什么会发生这种情况,以及如何解决该问题。 Any help would be appreciated. 任何帮助,将不胜感激。
If I send multiple UDP handshake packets of different data lengths between servers, the UDP packets merge. 如果我在服务器之间发送多个具有不同数据长度的UDP握手数据包,则UDP数据包将合并。
No they don't. 不,他们没有。
String receiveString = new String(receivePacket.getData());
Your problem is here. 您的问题在这里。 You are ignoring the length of the packet. 您正在忽略数据包的长度。 It should be: 它应该是:
String receiveString = new String(receivePacket.getData(), receivePacket.getOffset(), receivePacket.getLength());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.