Java Android Socket Connection. Неправильный IP-адрес, вызывающий приложение перестает отвечать - PullRequest
0 голосов
/ 09 декабря 2011

У меня есть сокетное соединение с телефона Android на сервер, и код работает нормально, когда я ввожу правильный IP-адрес и номер порта, но если они неверны, приложение перестает отвечать и говорит мне принудительно завершить работу.Я бы предположил, что catch (UnknownHostException e) перехватит это, но код перестанет отвечать при socket = new Socket (_ip, _portNum); ._ip и _port передаются в него тем, что пользователь вводит в телефон.Мне нужно сделать так, чтобы, если кто-то вводит неправильный IP-адрес или порт, это не приведет к сбою, но попросите его войти снова.

    public void Connect(String _ip, int _portNum) throws ParserConfigurationException, SAXException, IOException{  

    //CREATES SOCKET
    Socket socket = null;
    DataInputStream input = null;
    DataOutputStream output = null; 
    //CREATE DATA STREAMS   
    try{
        Log.e("trying to connect","trying to connect"); //sends to log
        socket = new Socket(_ip, _portNum); //stops responding here.
        Log.i("Socket Connected", "Socket Connected"); //not sent to log

        output = new DataOutputStream(socket.getOutputStream());
        input = new DataInputStream(socket.getInputStream());       

        }catch(UnknownHostException e){
        }catch(IOException e){
        }

        //IF STREAMS ARE OPEN SEND MESSAGES
    if (socket != null && output != null && input != null){          
        try{

            //MESSAGES FOR TESTING          
            output.writeBytes("HELLO2 \n");             

            String response;
            while((response = input.readLine()) != null){
                System.out.println("Server: " + response);                  

                //MESSAGE FOR TESTING
                output.writeBytes("Test \n");

                TextView test = (TextView) findViewById(R.id.TestText);
                // display text returned from server
                test.setText(response);            
            }   

            //CLOSE STREAMS AND CONNECTION          
            output.close();
            input.close();      
            socket.close(); 
                Log.i("Connections closed", "Connections closed");
            }catch(UnknownHostException e){
            }catch(IOException e){
            }
    }
}

Любая помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 09 декабря 2011

Возможно, время ожидания слишком велико для сокета.

Попробуйте

Socket s = new Socket();

s.connect(sockaddr, 5000);

В операторе catch, если он не работает, закройте сокет и т. Д.

0 голосов
/ 09 декабря 2011
        }catch(UnknownHostException e){
    }catch(IOException e){
    }

Это действительно очень плохая идея - ловить исключения и ничего не делать с ними.

Ссылка: (кстати, это почти 10 лет ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...