我在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() 函数的监听器:
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)
缓冲区=0x01
发送0x01
缓冲区=0x02
发送0x02
2)
缓冲区=0x01
发送0x01
缓冲区=0x02
罢工><罢工>发送0x01罢工>
什么鬼?!
最佳答案
通过使用thread.join()
解决,因为它需要等待线程完成才能发送带有更新缓冲区的新数据包。
关于java - android 和 UDP 数据包的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39705749/