Я сделал мессенджер, который получает данные с сервера через ObjectInputStream. Я хочу иметь возможность извлекать/отправлять сериализуемые файлы, а также иметь возможность извлекать/отправлять сообщения от пользователя.
Я не мог найти хороший способ сортировки между ними (объектами и сообщениями), не вызывая конфликта с обменом сообщениями.
Я пытался использовать два потока для одного и того же сокета (Data*Stream и Object*Stream), и, похоже, все работает нормально, но когда я пытаюсь отправить сообщение с сервера клиенту через Data*Stream, я получаю java.net.SocketException: socket closed
на мой клиент. (происходит только тогда, когда я отправляю сообщение)
Может ли кто-нибудь указать мне правильное направление, как я подойду к получению двух разных типов информации через поток? (не ища легкого выхода. Я не хочу делать writeObject("[message]"+input);
или подобные дешевые трюки.
(РЕДАКТИРОВАТЬ) РЕШЕНИЕ:
Благодаря janos, он вдохновил меня на написание этого кода. :') Спасибо чувак
Входной приемник:
protected Object data;
public synchronized Object receivedData() throws ClassNotFoundException,
IOException {
data = in.readObject();
if(!(data instanceof String)) {
retrieveObject();
data = "";
System.out.println("Object");
}
return data;
}
И ветка сообщений:
ExecutorService pool = Executors.newScheduledThreadPool(1);
private Runnable receiveData;
public void receiveData() {
receiveData = new Runnable() {
public void run() {
String input;
try {
while((input = (String) receivedData()) != null) {
if(input.length() > 1)
System.out.println(input);
}
}catch(IOException | ClassNotFoundException e){ e.printStackTrace();}
}
};
pool.execute(receiveData);
}
Если у вас есть какие-либо советы по улучшению, сообщите мне, и я обновлю этот код.