การเชื่อมต่อซ็อกเก็ต Java Android ที่อยู่ IP ไม่ถูกต้องทำให้แอปพลิเคชันหยุดการตอบสนอง

ฉันมีการเชื่อมต่อซ็อกเก็ตจากโทรศัพท์ 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){
            }
    }
}

ความช่วยเหลือใด ๆ ที่ซาบซึ้งอย่างมาก


person Paul Maserrat    schedule 09.12.2011    source แหล่งที่มา


คำตอบ (2)


บางทีการหมดเวลาบนซ็อกเก็ตอาจยาวเกินไป

พยายาม

Socket s = new Socket();

s.connect(sockaddr, 5000);

ภายในคำสั่ง catch หากล้มเหลว ให้ปิดซ็อกเก็ต ฯลฯ

person Davos555    schedule 09.12.2011

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

เป็นความคิดที่แย่มากที่จะจับข้อยกเว้นและไม่ทำอะไรกับพวกเขา

อ้างอิง: (แต่นี่ก็เกือบ 10 ปีแล้ว...)

person Pedantic    schedule 09.12.2011