Мой опыт работы с TCP-сокетами использует исключительно данные ASCII, и мой код отражает это, я верю.Если это так, вы можете попробовать это:
Сначала попробуйте создать экземпляр ваших потоков данных следующим образом:
socket = new Socket (Dest, Port);
toServer = new PrintWriter (socket.getOutputStream(), true);
fromServer = new BufferedReader (new InputStreamReader
(socket.getInputStream()), 8000);
Значение true в конце, конструктор printWriter сообщает этоавтоматическая очистка (прекрасный термин) буфера при выдаче println.
Когда вы фактически используете сокет, используйте следующее:
toServer.println (msg.trim());
resp = fromServer.readLine().trim();
Мне не нужно добавлять \ nсам с исходящим текстом, но это может быть связано с моей конкретной ситуацией (подробнее об этом ниже).Входящие данные должны иметь \ n в конце, иначе readLine не работает.Я предполагаю, что есть способы, которыми вы можете читать из байта сокета побайтно, но также и то, что код будет не таким уж простым.
К сожалению, TCP-сервер, с которым я общаюсь, - это программа C ++, поэтомумы гарантируем, что \ n присутствует во входящих данных, не будет работать для вас (и может не понадобиться в исходящих данных).
Наконец, если это поможет, я построил свой код на основе этоговеб-пример:
http://content.gpwiki.org/index.php/Java:Tutorials:Simple_TCP_Networking
Редактировать: я нашел другой пример кода, который использует DataOutputStream ... Возможно, вы найдете его полезным, если вы его еще не видели.
http://systembash.com/content/a-simple-java-tcp-server-and-tcp-client/