android - UDP 服务器不接受来自外部的调用

标签 android

我在我的 Android 设备上实现了简单的 udp 服务器。(sdk 1.5) 当我在手机上运行本地客户端时,它工作正常,通过它向我的服务器发送触发器。

但是当我尝试从外部服务器获取 udp 调用到我的手机时,它不起作用。 已经确保外部服务器未被防火墙阻止,并且它正在将 udp 触发器发送到我的手机正在监听的正确端口。

我在手机上使用了 natstat 并检查了手机是否真的在监听它的本地 ip 和我设置的端口。

这是我的服务器代码:(在设备上)

    // server will listen to one client
    try
    {
        Thread udpServerThread = new Thread()
        {

            @Override
            public void run()
            {
                try
                {
                //   Retrieve the ServerName 

                            InetAddress serverAddr = InetAddress
                            .getByName("localhost");

                    Log.d("UDP", "S: Connecting...");
                    // Create new UDP-Socket 
                    socket = new DatagramSocket(SERVERPORT,serverAddr);






                    byte[] buf = new byte[17];


                    // * Prepare a UDP-Packet that can contain the data we
                    // * want to receive

                    DatagramPacket packet = new DatagramPacket(buf,
                            buf.length);
                    Log.d("UDP", "S: Receiving...");

                //   wait to Receive the UDP-Packet 
                    socket.receive(packet);
                    Log.d("UDP", "S: Received: '"
                            + new String(packet.getData()) + "'");


                    acceptedMsg=new String(packet.getData());


                    notifyService(acceptedMsg);



                    Log.d("UDP", "S: Done.");
                } catch (Exception e)
                {
                    Log.e("UDP", "S: Error", e);
                }


            }

        };
        udpServerThread.start();

    }

    catch (Exception E)
    {
     Log.e("r",E.getMessage())  ;
    }

所以正如我所说,当我尝试使用发送 udp 触发器的本地客户端(独立线程)时,它工作正常,但是当我采用此客户端实现并将其放在外部真实服务器上时, UDP发送后手机无响应。

有什么想法吗?

谢谢,

射线。

最佳答案

我猜测,当您调用 InetAddress.getByName("localhost") 时,您将获得环回地址 (127.0.0.1)。

您真正想要做的是将套接字绑定(bind)到 INADDR_ANY,这显然可以通过创建 DatagramSocket 来实现,如下所示:

socket = new DatagramSocket(SERVERPORT);

关于android - UDP 服务器不接受来自外部的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2818284/

相关文章:

android - 如何在点击通知时显示对​​话框

android - 为每隔几秒发出一次请求的android应用程序创建服务器端

c# - 在 C# 中将 SQLite 数据库读取为文件

android - 当应用程序被杀死android时未收到使用FCM的推送通知

android - Chromecast 无法播放 Shoutcast Stream

java - android audioRecord-应用变化增益

Android 应用程序不响应短信接收器

android - 解析 blockquote 中的 p 标签

android - 如何从选项卡中的两个不同 fragment 获取数据到主要 Activity

android - 在 Geocoder 中使用高度