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());

Нищо не се случва нито от страната на сървъра, нито от страната на клиента. Всичко попада на тази линия. И клиентът, и сървърът се опитват да получат входния поток от сокета, но не работи нито клиентът, нито сървърът. Как да разреша този проблем, така че да мога да предавам сериализираните данни между клиент и сървър?


person Alendorff    schedule 12.01.2014    source източник


Отговори (1)


Като javadoc казва:

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

Така че, тъй като и сървърът, и клиентът започват с отваряне на InputStream, вие сте внедрили блокиране: и двамата блокират, докато другата страна не изпрати заглавката на потока. Ако започнете с отваряне на ObjectInputStream от страна на клиента, трябва да започнете с отваряне на ObjectOutputStream (и незабавно изчистване, ако е необходимо) от страна на сървъра (или обратно).

person JB Nizet    schedule 12.01.2014
comment
Знаех си, че това е задънена улица! :) Явно не съм гледал внимателно документацията. Благодаря ти много. - person Alendorff; 12.01.2014