java - android 和 UDP 数据包的奇怪行为

标签 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();
}

这是主函数中调用 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/

相关文章:

java - 使用调度程序或 Thread.Sleep 的线程延迟

java - MiGLayout 不会向下展开 JPanel

android - DialogFragment 未显示在监听器中

java - DatagramPacket - getData 是否总是返回传递的相同缓冲区?

java - groovy和java程序之间通过socket进行通信

java - 如何读取 CSV header 并将它们放入 java 列表中

java - 如何使用 JPA 实体构建和填充数据库?

android - 2019 年适用于 Android 的 Phonegap 推送通知 - 它有效吗?

android - 无法让 dagger2 将改造 api 注入(inject)单例对象,然后将该单例对象注入(inject) fragment

java - 如何把Java程序放到网上?