android 和 UDP 数据包的奇怪行为
Strange behavior with android and UDP packets
我在 android studio 中制作了一个简单的应用程序来发送 UDP 数据包,所以当我单击一个按钮时,它会调用一个函数来检查调用该函数的组件类型并分别发送不同数据包的数据。
这是发送数据包的函数:
public void sendPacket(View v) {
if (v instanceof Button)
buffer = ((Button) v).getHint().toString().getBytes();
else if (v instanceof EditText)
buffer = ((EditText) v).getText().toString().getBytes();
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
DatagramPacket packet = new DatagramPacket(buffer, buffer.length, ip, port);
try {
SelectionActivity.datagramSocket.send(packet);
} catch (IOException e) {
e.printStackTrace();
}
}
});
thread.start();
}
这是调用 sendPacket() 函数的 main 函数中的侦听器:
btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (<some checks>)
sendPacket(txt.findViewById(R.id.txt));
sendPacket(btn.findViewById(R.id.btn));
}
});
问题是它随机发送一个数据and/or另一个即使它改变。
例如:
1)
缓冲区 = 0x01
发送 0x01
缓冲区 = 0x02
发送 0x02
2)
缓冲区 = 0x01
发送 0x01
缓冲区 = 0x02
发送 0x01
卧槽?!
已通过使用 thread.join()
解决,因为它需要等待线程完成才能发送具有更新缓冲区的新数据包。
我在 android studio 中制作了一个简单的应用程序来发送 UDP 数据包,所以当我单击一个按钮时,它会调用一个函数来检查调用该函数的组件类型并分别发送不同数据包的数据。 这是发送数据包的函数:
public void sendPacket(View v) {
if (v instanceof Button)
buffer = ((Button) v).getHint().toString().getBytes();
else if (v instanceof EditText)
buffer = ((EditText) v).getText().toString().getBytes();
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
DatagramPacket packet = new DatagramPacket(buffer, buffer.length, ip, port);
try {
SelectionActivity.datagramSocket.send(packet);
} catch (IOException e) {
e.printStackTrace();
}
}
});
thread.start();
}
这是调用 sendPacket() 函数的 main 函数中的侦听器:
btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (<some checks>)
sendPacket(txt.findViewById(R.id.txt));
sendPacket(btn.findViewById(R.id.btn));
}
});
问题是它随机发送一个数据and/or另一个即使它改变。
例如:
1)
缓冲区 = 0x01
发送 0x01
缓冲区 = 0x02
发送 0x02
2)
缓冲区 = 0x01
发送 0x01
缓冲区 = 0x02
发送 0x01
卧槽?!
已通过使用 thread.join()
解决,因为它需要等待线程完成才能发送具有更新缓冲区的新数据包。