Android和UDP数据包的奇怪行为

时间:2016-09-26 14:39:47

标签: java android sockets android-studio udp

我在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?!

1 个答案:

答案 0 :(得分:0)

使用thread.join()解决,因为在发送带有更新缓冲区的新数据包之前需要等待线程完成。