Android - Серверная розетка - PullRequest
       10

Android - Серверная розетка

5 голосов
/ 17 сентября 2011

У меня мало вопросов по поводу Socket Communication в Android.

1) Я разработал приложение для сокетов серверов для Android, которое прослушивает порт 8888.

a) Когда я размещаю свой сервер наэмулятор Я не могу связаться с ним через клиентское приложение, которое есть на моем ПК, поскольку оба приложения (эмулятор и клиент) находятся на моем ноутбуке и в одной сети, и я думаю, что они должны иметь возможность общаться друг с другом.

b) Когда я развертываю то же серверное приложение на моем мобильном устройстве Android и пытаюсь передать его через то же клиентское приложение, которое есть на моем ПК, клиентское приложение выдает исключение тайм-аута, так как оно не может связаться с ним.

Мой первый вопрос: как я могу протестировать приложение сокет сервер / клиент с помощью эмулятора и 1 устройства Android?Могу ли я даже использовать клиентское приложение сокета моего компьютера для проверки моего серверного сокета?

** У меня есть приложение клиентского сокета для другого моего приложения, поэтому проблем с клиентским приложением нет.

2) МойВторой вопрос заключается в том, чтобы проверить приложение моего сервера на устройстве Android. Нужно ли переадресовывать нужный порт?а) Для эмулятора: как я могу перенаправить порт?б) Для устройства: как я могу перенаправить порт?c) Могу ли я переадресовать порт программно?

** Только для информации:

Я использую Eclipse в качестве средства разработки Android.

** МОЙ серверный код, как можноТакже возникнут проблемы с кодом моего сокета сервера.

Socket socket = null;
            DataInputStream dataInputStream = null;
            DataOutputStream dataOutputStream = null;
            ServerSocket serverSocket = null;
        try
        {  
            serverSocket = new ServerSocket(SERVERPORT);
            System.out.println("Listening :" + SERVERPORT);
            System.out.println("Server IP:" + SERVERIP);
        }
        catch (Exception e) 
        {               
            e.printStackTrace();
        }
        while(true)
        {
            try
            {
                socket = serverSocket.accept();
                BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                System.out.println("ip: " + socket.getInetAddress());                   
                String str = in.readLine();
                System.out.println("message Received: " + str);
            } 
            catch (Exception e) 
            {                   
                e.printStackTrace();
            }               
            finally
            {
                if( socket!= null)
                {
                    try 
                    {
                        socket.close();
                    }
                    catch (IOException e) 
                    {
                        e.printStackTrace();
                    }
                }
                if( dataInputStream!= null)
                {
                    try
                    {
                        dataInputStream.close();
                    }
                    catch (IOException e) 
                    {
                        e.printStackTrace();
                    }
                }                   
                if( dataOutputStream!= null)
                {
                    try 
                    {
                        dataOutputStream.close();
                    }
                    catch (IOException e) 
                    {
                        e.printStackTrace();
                    }
                }
            }
        }

Отредактировано: Очень интересная часть заключается в том, что если я установлю порт на 8080 Client Socket App на ПК, подключусь к приложению Android на моемAndroid-устройство, но я не получаю сокет на моем сервере, ни данные, которые я отправляю.Ничего не происходит после ссылки => socket = serversocket.accept ();

Также я установил разрешение в манифесте.


Ответы [ 2 ]

9 голосов
/ 17 сентября 2011

Вы установили правильное разрешение внутри вашего Manifest.xml?

<uses-permission android:name="android.permission.INTERNET" />

необходим для настройки сокетов

6 голосов
/ 17 сентября 2011

Ваш первый вопрос о том, как получить доступ к сети из эмулятора: эмулятор работает в собственном сетевом адресном пространстве, изолированном от вашего ПК. Вам необходимо настроить перенаправление сети для доступа к устройствам в вашей сети.

Подробнее см. В https://developer.android.com/studio/run/emulator-networking.html

...