Проблема в том, в каком порядке вы создаете потоки:
На сервере из статьи (который, как я предполагаю, вы используете), когда открывается новое соединение, сервер открывает сначала входной поток, а затем выходной поток:
public Connect(Socket clientSocket) {
client = clientSocket;
try {
ois = new ObjectInputStream(client.getInputStream());
oos = new ObjectOutputStream(client.getOutputStream());
} catch(Exception e1) {
// ...
}
this.start();
}
В коде примера с комментариями используется обратный порядок: сначала устанавливается поток вывода, а затем поток ввода:
// open a socket connection
socket = new Socket("localhost", 2000);
// open I/O streams for objects
oos = new ObjectOutputStream(socket.getOutputStream());
ois = new ObjectInputStream(socket.getInputStream());
Но ваш код делает это наоборот:
server = new Socket(host, port);
in = new ObjectInputStream(server.getInputStream());
out = new ObjectOutputStream(server.getOutputStream());
Установление пары выходной поток/входной поток остановится до тех пор, пока они не обменялись информацией о квитировании, поэтому вы должны соответствовать порядку создания. Вы можете сделать это, просто поменяв местами строки 34 и 35 в вашем примере кода.
person
Mike Houston
schedule
23.01.2009