Android-сокет DataOutputStream.writeUTF - PullRequest
       3

Android-сокет DataOutputStream.writeUTF

7 голосов
/ 03 февраля 2012

пишу в сокет клиент:

clientSocket = new Socket("192.168.1.102", 15780);
outToServer = new DataOutputStream(clientSocket.getOutputStream());

Все работает. Но я не хочу отправлять на сервер сообщения UTF -8 и делаю так:

outToServer.writeBytes("msg#");//server tag
outToServer.writeUTF("hello");
//outToServer.writeUTF(str); //or another string
outToServer.writeBytes("\n");
outToServer.flush();

Сообщения становятся такими:

secret byte

Скажите, пожалуйста, почему? Как правильно отправлять UTF-сообщения?

1 Ответ

18 голосов
/ 03 февраля 2012

writeUTF() документация говорит:

Во-первых, два байта записываются в выходной поток, как если бы он был записан методом writeShort с указанием количества байтов, которые должны следовать. Это значение - количество фактически записанных байтов, а не длина строки.

Вы можете кодировать строку как utf-8 самостоятельно, а затем отправить полученный байтовый массив на сервер, используя write():

byte[] buf = "hello".getBytes("UTF-8");
outToServer.write(buf, 0, buf.length);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...