java.net.ConnectException: /192.168.1.106:8002 - соединение отклонено (исключение Android) - PullRequest
0 голосов
/ 01 сентября 2011

Я сталкиваюсь с этой текущей проблемой.

Я могу отправить команду на устройство и получить ответ от устройства с эмулятора Android на сокет.

Но при установкетакое же приложение на планшете, есть проблема.Когда я отправляю команду в первый раз, чтобы проверить состояние подключенного устройства или нет, он отправляет мне ответ, что устройство подключено, но когда я отправляю команду во второй раз, выдается следующее исключение:

java.net.ConnectException: /192.168.1.106:8002 - Соединение отклонено.

Этот код выполняет запрос:

public static String sendRequestandResponse(final String host,final int  port,
            final String command,
            final int timeoutInMillis,final int responseLength) throws UnknownHostException,NetworkSettingException

            {
        if (host == null)
        {
            throw new NullPointerException("host is null");  //NOPMD
        }
        Socket clientSocket=null;
        try {

            /**
             * Creating socket connection with IP address and port number to send Command
             */
            try{
                clientSocket = new Socket();

                SocketAddress remoteAdr = new InetSocketAddress(host, port);
                clientSocket.connect(remoteAdr, 1000);
                clientSocket.setSoTimeout(timeoutInMillis);
            }catch (Exception e) {
                e.printStackTrace();
                throw new NetworkSettingException(e.getMessage());
            }




            final PrintWriter outPutStream = new PrintWriter(new OutputStreamWriter(clientSocket.getOutputStream(), CHARSET));
            try
            {
                outPutStream.print(command);
                        outPutStream.flush();
                    BufferedReader responseString = new BufferedReader(new InputStreamReader(clientSocket.getInputStream(), CHARSET));
                response   = new StringBuilder(); 
                try
                {

                    int pos = 0;
                    while (true)
                    {
                        pos++;
                        System.out.println(pos);
                        int i=responseString.read();
                        byte[] resp={(byte)i};
                        System.out.println(new String(resp));
                        response.append(new String(resp));
                        if(pos>=responseLength){
                            {
                                clientSocket.shutdownInput();
                                clientSocket.shutdownOutput();
                                clientSocket.close();
                                Log.d("ConnectionSocket", "Socket closed with break");
                                break;
                            }


                        }
                    }

                }catch (Exception e) {
                    e.printStackTrace();
                }
                finally
                {
                    responseString.close();
                }


            }
            finally
            {
                outPutStream.close();
            }

        }

        catch(IOException ex){
        }
        catch(NullPointerException ex){  //NOPMD
        }

        finally
        {
            try {
                clientSocket.shutdownInput();
                clientSocket.shutdownOutput();
                clientSocket.close();
            } catch (NullPointerException ex) { //NOPMD
            } catch (IOException ex) {
            }
        }
        return response.toString();
            }

Я думаю, что он не закрывает сокет в первый раз,поэтому во второй раз он отказывается от соединения.

Этот же код работает на эмуляторе, хотя.

1 Ответ

0 голосов
/ 08 февраля 2012

Вы получите отказ в соединении только тогда, когда сервер не принимает соединение.

В основном проблема заключается в брандмауэре, который блокирует любое ненадежное входящее соединение.

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

Таким образом, вы можете добавить список исключений в брандмауэр для вашего приложения.

...