我在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();
}
这是main函数中调用sendPacket()函数的监听器:
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));
}
});
问题在于它随机发送一个数据和/或另一个,即使它发生了变化。
例如:
1)
buffer = 0x01
发送0x01
buffer = 0x02
发送0x02
2)
buffer = 0x01
发送0x01
buffer = 0x02
发送0x01
WTF?!
答案 0 :(得分:0)
使用thread.join()
解决,因为在发送带有更新缓冲区的新数据包之前需要等待线程完成。