2016-06-24 3 views
0

Я разрабатываю приложение на студии android. Я пытаюсь открыть соединение сокета.Socket tcp connection

Когда пользователь вводит правильный IP-адрес, все работает нормально, но если адрес неправильный IP, Socket не подключен.

Но проблема в том, что Socket не бросает уловку Exception, приложение запущено, и теперь, если пользователь вводит правильный IP-адрес, сокет не подключен.

Мой вопрос в том, почему он не бросает улов Exception, если IP-адрес неправильный IP и как я могу заставить его работать?

Вот код

try { 
     sockettcp = new Socket(Address, Port); 
    } catch (Exception e) { 
     valid = false; 
    } 
+0

Откуда вы знаете, что он не входит в блок catch? – Fildor

+0

@fildor с режимом отладки – pape

+1

Мое предположение, что ваше приложение «Freezes»? – Igoranze

ответ

1

Нормальный способ Socket является то, что он пытается подключиться к данному IP на данном порту.

Если по какой-либо причине IP-адрес не является правильным, то Socket не будет генерировать ошибку, вместо этого он будет «тайм-аут», пытающийся восстановить соединение каждую минуту или около того (основной поток или поток GUI).

В 4 ошибки, которые выбрасываются этим типом конструктора public Socket(String host, int port) являются:

IOException //- if an error occurs during the connection 

SocketTimeoutException //- if timeout expires before connecting 

IllegalBlockingModeException //- if this socket has an associated channel, and the channel is in non-blocking mode 

IllegalArgumentException //- if endpoint is null or is a SocketAddress subclass not supported by this socket 

«исправить» ваша проблема, вы можете установить тайм-аут для вашего значения (это не может превышать платформы по умолчанию)

Socket sck = new Socket(); 
sck.connect(new InetSocketAddress(ip, port), timeout); 

Чтобы "Проверить", если ваш Socket подключен, вы можете попробовать это:

Socket.isConnected(); //Returns the connection state of the socket. 

Примечание: Закрытие сокета не очищает его состояние соединения, что означает, что этот метод вернет true для закрытого гнезда (см. isClosed()), если он был успешно подключен до его закрытия.

См. javadoc для получения дополнительной информации о Socket.

+1

Спасибо, что моя проблема решена сейчас, большое спасибо – pape

+0

@pape Добро пожаловать – Igoranze

+0

@EJP Я пытаюсь понять, что вы имеете в виду, но у меня очень плохой английский, и я не профессионал в сети коммуникации. Извините – pape