Другие языки программирования и технологии

JAVA - Server - Socket как обнаружить разрыв соединения.. Метод какой-нить есть?

Есть сокет и клиент. Между ними идет передача данных. Интернет отключается, данные передаваться больше не могут.. Возможно ли какой-то функцией это засечь, кроме как периодически отсылать и принимать левые пакеты, пока в этой передаче не будет сбоя? Пробовал socket.isConnected(), но как я понял он показывает только был ли подключен единожды, а не подключен ли сейчас import java.net.*; import java.io.*; public class Client { public static void main(String[] ar) { int serverPort = 1111; String address = "5.251.155.121"; try { InetAddress ipAddress = InetAddress.getByName(address); System.out.println("Подключаюсь.."); Socket socket = new Socket(ipAddress, serverPort); System.out.println("Успешно."); } catch (Exception x) { System.out.println("Ошибка."); } ... socket.close(); } import java.net.*; import java.io.*; public class Server { public static void main(String[] ar) throws IOException { int port = 1111; ServerSocket ss = new ServerSocket(Integer.valueOf("1111")); Socket socket = ss.accept(); ... socket.close(); ss.close(); } }
Если бы я сейчас не прибывал в блаженном утреннем состоянии, то посоветовал бы тебе убиться об стену.

Простой вопрос. Никогда не интересовался, почему когда пишешь такие закорючки как ss.accept(); или new ServerSocket(Integer.valueOf("1111")) глупый эклипс/нетбинс/джавак (в консольке для "реальных" пацанов) выводит какие-то глупые ошибки и предлагает их исправить добавлением к описанию функции строчки throws IOException?

Дело в том, что добрые разработчики Джавы решили каждый раз тыкать носом разработчиков-балбесов в то, что функция может вызывать исключения. А разработчики-балбесы это не ценят и обламывают весь феншуй.

Короче, крато.
1) То, что действительно было важно в устройстве сервера, ты замазал ...Каким-то образом ты взаимодействуешь с сокетом ss. Так вот, функция чтения, в случае ошибки вызывает исключение, какое конкретно, зависит от функции. За ...не видно. Если это BufferedReader, то это будет IOException, если какой-нибудь Scanner, то, соответственно NoSuchElementException и т. д. , в JavaDoc все более или менее подробно описано.

Т. е. у тебя примерно так должно быть
BufferedReader breader = new BufferedReader(new InputStreamReader(ss.getInputStream()));
try {
System.out.println(breader.readLine());
} catch (IOException e) {
System.err.println("Тут-то, при незапланированном обрыве, и должно вылететь! \n");
e.printStackTrace();
return;
}

2) Почитай про механизм исключений. Там не много и не сложно. Уж если ты это не осилишь, то дальше VBA тебе соваться не стоит.
Vova Hashimov
Vova Hashimov
1 480
Лучший ответ
Денис Головко Окей, это всё прекрасно, НО!!!!Этот буфер ридер мне не нужен, я же писал "кроме как периодически отсылать и принимать левые пакеты, пока в этой передаче не будет сбоя?". Если я всё время жду обрыва связи, то да, согласен, твой пример подойдёт но я бы тогда не спрашивал.
У меня же висит огромная прога, которая обменивается пакетами с другим компом в сети. Я не могу впихнуть в неё буферридер, ибо могу принять или отослать не то что мне нужно принимать или отсылать.

Потому и спросил, можно ли это сделать БЕЗ принудительного пинга, написанного вручную, а как-то встроено..

И это же надо было....Как по мне ВБА сложнее джавы Оо. По крайней мере в джаве мне комфортнее на много..