Я пишу сервер-клиентское приложение. Клиент отправляет какие-то данные через разные потоки на сервер. Как только я размещаю потоки в основном методе, программа ничего не делает; без исключения просто пустая консоль:
try {
socket = new Socket("localhost", 4050);
din = new DataInputStream(socket.getInputStream());
oin = new ObjectInputStream(socket.getInputStream());
dout = new DataOutputStream(socket.getOutputStream());
} catch (UnknownHostException e) {
System.out.println("Exception: the host is unknown");
} catch (IOException e) {
System.out.println("I/O exception thrown by socket");
}
Как только я удаляю этот поток oin = new ObjectInputStream(socket.getInputStream());
из этой части основного метода, программа выдает исключение EOFException или сброс соединения.
Что такого особенного в приведенном выше коде, что программа ничего не делает и не выдает никаких исключений?
Как только вы поместите упомянутый поток в отдельный метод
private static MessageObject readObject(){
MessageObject mo = null;
try{
oin = new ObjectInputStream(socket.getInputStream());
mo = (MessageObject)oin.readObject();
}
catch(IOException e){
System.err.println(e.getCause());
}
catch(ClassNotFoundException e){
System.err.println(e.getCause());
}
return mo;
}
Выдает это исключение:
Exception in thread "main" java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at java.io.DataInputStream.readBoolean(Unknown Source)
at Server.main(Server.java:77)
На сервере находится в ветке if:
if (din.readBoolean()) {
ObjectInputStream oin = new ObjectInputStream(s.getInputStream());
MessageObject o = (MessageObject)oin.readObject();
// server saves the whole thing
MessageDB.add(o);
}
Я не могу разместить здесь весь свой код, это мое задание.
упс, извините, ошибка найдена. Логическая ошибка: сервер ожидал ввода, но клиент отказывался его отправлять.