2014-01-12 3 views
0

У меня есть серверObjectInputStream из socket.getInputStream()

ServerSocket socketListener = new ServerSocket(Config.PORT); 
... 
client = socketListener.accept(); 

и клиент

sock = new Socket("127.0.0.1", Config.PORT); 

Я хочу передать между ними некоторыми сериализованными данными, используя ObjectInputStream и ObjectOutputStream. Когда я пытаюсь не делать

ObjectInputStream inputStream = new ObjectInputStream(socket.getInputStream()); 

ничего не происходит ни на стороне сервера, ни стороне клиента. Все падает на эту линию. И клиент, и сервер пытаются получить входной поток из сокета, но он не работает, ни клиент, ни сервер. Как решить эту проблему, чтобы я мог передавать сериализованные данные между клиентом и сервером?

ответ

1

Как the javadoc говорит:

Создает ObjectInputStream, который считывает из указанного InputStream. Заголовок потока сериализации считывается из потока и проверяется. Этот конструктор будет блокироваться до тех пор, пока соответствующий объект ObjectOutputStream не запишет и не сбросит заголовок.

Итак, поскольку и сервер, и клиент начинают с открытия InputStream, вы реализовали тупик: оба блока блокируются до тех пор, пока другая сторона не отправит заголовок потока. Если вы начнете с открытия объекта ObjectInputStream на стороне клиента, вы должны начать с открытия ObjectOutputStream (и при необходимости немедленно промывки) на стороне сервера (или наоборот).

+0

Я знал, что тупик! :) Очевидно, я не внимательно смотрел документацию. Большое спасибо. – Alendorff