Сетевой вывод с сервера не может быть прочитан клиентом

#java #network-programming

#java #сетевое программирование

Вопрос:

Итак, у меня есть простой сервер сокетов и сокет. Я успешно запускаю сервер сокетов. Клиентский сокет подключается и отправляет строку — это работает. Я хочу, чтобы сервер записал другую информацию на основе этой строки. Я могу проверить, что это за строка, и передать OutputStream клиенту, но всякий раз, когда я пишу в него и сбрасываю, клиентский InputStream НИКОГДА не находится в состоянии готовности и никогда не получит сообщение обратно… Я просто не вижу, что я делаю неправильно.

Весь код находится на http://pastebin.com/u/omegazero

NetworkAgent.java является ли клиент, SimbadAgent.java является ли сервер и UserAgent.java это фактическая реализация указанного сервера (сервер является абстрактным по другим причинам).

Скомпилируйте все, затем запустите UserAgent, за которым следует NetworkAgent, и вы увидите, что произойдет.

Ответ №1:

Выполнил ваш код (после комментария ссылки на StringQueue в SimbadAgent), и я получил следующий вывод.

 wrote get_cmd
Input shutdown? false
iS()iI()iM()iB()iA()iD()i ()iB()iO()iO()iY()iA()NETWORKAGENT: Response to "get_cmd": "SIMBAD BOOYA"
  

Комментарии:

1. Подождите … неужели? Мне придется протестировать его на другой ОС … возможно, это моя настройка Debian или что-то странное. Спасибо.

2. На самом деле это было потому, что мне пришлось переключить их на PrintWriter и BufferedReader, если кто-нибудь в конце концов прочитает это. Java, по-видимому, непостоянна в отношении потоков символов..