UDP-сервер не принимает звонки извне - PullRequest
1 голос
/ 12 мая 2010

Я реализовал простой сервер udp на моем устройстве Android. (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 телефон не отвечает на него.

есть идеи?

спасибо,

луч.

1 Ответ

1 голос
/ 12 мая 2010

В предположении, я предполагаю, что когда вы звоните InetAddress.getByName("localhost"), вы получаете адрес обратной связи (127.0.0.1).

Что вы на самом деле хотите сделать, так это привязать сокет к INADDR_ANY, чего вы, очевидно, можете достичь, создав свой DatagramSocket примерно так:

socket = new DatagramSocket(SERVERPORT);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...