java - 为什么我来自 Android 的 UDP 消息不起作用?

标签 java android udp

我编写了一个小的 java 代码脚本,它通过 UDP 将消息发送到我计算机上的服务器:

@Override
public void onClick(View view) {
    try {
        DatagramSocket clientSocket = new DatagramSocket();
        InetAddress IP = InetAddress.getByName("192.168.1.5");
        byte[] sendData = new byte[1024];
        String sentence = "HELLO";

        sendData = sentence.getBytes();

        DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IP, 9876);
        clientSocket.send(sendPacket);

        clientSocket.close();
    } catch(IOException e) {

    }
}

我在网络上的另一台计算机上尝试了相同的代码,然后可以正确发送和接收消息。当我尝试从我的 Android 手机运行它时,服务器不会收到它。这是为什么?

编辑

我忘记在 list 中添加互联网权限,但是当我这样做时,当我点击按钮时应用程序崩溃了:

06-13 21:14:26.932  13501-13501/com.example.omgandroid E/AndroidRuntime﹕ FATAL EXCEPTION: main
android.os.NetworkOnMainThreadException
        at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1144)
        at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:175)
        at libcore.io.IoBridge.sendto(IoBridge.java:466)
        at java.net.PlainDatagramSocketImpl.send(PlainDatagramSocketImpl.java:182)
        at java.net.DatagramSocket.send(DatagramSocket.java:284)
        at com.example.omgandroid.MainActivity.onClick(MainActivity.java:72)
        at android.view.View.performClick(View.java:4475)
        at android.view.View$PerformClick.run(View.java:18786)
        at android.os.Handler.handleCallback(Handler.java:730)
        at android.os.Handler.dispatchMessage(Handler.java:92)
        at android.os.Looper.loop(Looper.java:176)
        at android.app.ActivityThread.main(ActivityThread.java:5419)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:525)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
        at dalvik.system.NativeStart.main(Native Method)
06-13 21:14:38.987  13501-13501/com.example.omgandroid I/Process﹕ Sending signal. PID: 13501 SIG: 9

这可能是什么原因?

最佳答案

Android 不允许来自主线程的网络连接(NetworkOnMainThreadException),以免阻塞用户界面。他们希望用户界面能够响应并且不会被网络操作阻塞,这样用户就不会认为应用程序崩溃了。

您必须在新线程中处理网络内容。

AsyncTask对此有好处。

关于java - 为什么我来自 Android 的 UDP 消息不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24211335/

相关文章:

java - 不兼容的类型 Android 允许权限?

java - NetBeans 7 中没有 GroupLayout,怎么了?

Canvas 上的 Android Mask 位图生成一个黑色空间

java - 我在 Eclipse Android 项目中真正需要哪些构建器?

java - 在 Java 和 Ubuntu 中从双网卡接收 UDP

android - Android 中的 Gstreamer。 UDP流

linux - 广播消息中的绑定(bind)函数

java - java中的数学问题试图找出我的代码有什么问题

javascript - 本地存储无法在 Android 上运行

java - 多对多自引用hibernate注释(带有两个实体)