2013-04-13 3 views
4

Я хочу отправить строку с моего Android-устройства на сервер node.js через сокет. Соединение работает уже, но всякий раз, когда я отправляю строку, сервер получает дополнительные символы.Соединение сокета - Java добавляет байты

Это то, что я получаю, когда я отправить строку «Ганса» на сервер Node.js:

Buffer ac ed 
Buffer 00 05 77 04 68 61 6e 73 

в utf8 строку:

?? 
♣w♦hans 

Вот Java часть, которая отправляет строка:

clientSocket = new Socket("xxx.xxx.xxx.xxx",9988); 
ObjectOutputStream clientOut = new ObjectOutputStream(clientSocket.getOutputStream());    

String sendString = "hans";    
clientOut.write(sendString.getBytes()); 
clientOut.flush(); 

Так почему же это происходит?

+0

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

+1

Используйте только 'OutputStream' вместо' ObjectOutputStream'. – hardartcore

ответ

6

Вы используете ObjectOutputStream, который используется для отправки сериализованных объектов и должен быть декодирован ObjectInputStream на другом конце. Если вы просто отправляете байты и читаете байты на другом конце, вы должны просто использовать OutputStream и InputStream.

+0

Предпочтительно 'Writer', а не исходный/входной поток. –

+0

Вам все равно нужно каким-то образом закодировать данные. В противном случае получатель не сможет узнать, где все начинается и заканчивается. В принципе, ОП просто написал код для отправки и получения данных без предварительного проектирования * протокола *, который точно определяет, что нужно отправить, когда и как. –

+1

'ObjectOutputStream' не предназначен для отправки примитивных типов данных, но для любого сериализуемого типа данных в Java. Думаю, вы думаете о DataOutputStream при обращении к примитивам. –

Смежные вопросы