Отправка и получение байтов через Android-сокет две проблемы: - PullRequest
0 голосов
/ 04 октября 2019

У меня проблема со студией JAVA / Android, связанная с отправкой и получением байтов. В частности: отправка и получение байтовых значений более 127 с использованием сокетов TCP.

Я получаю данные здесь:

    try {
        mBufferOut = new PrintWriter(socket.getOutputStream());
        mBufferIn = new InputStreamReader(socket.getInputStream(), "UTF-8");
        char[] buffer = new char[64];

        while (mRun) {
mBufferIn.read(buffer);
            mServerMessage = String.valueOf(buffer);
            if (mServerMessage != null && mMessageListener != null) {
                mMessageListener.messageReceived(mServerMessage);
            }
            mServerMessage = null;
        }

и отправляю данные здесь:

public void sendMessage(final char[] message) {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                if (mBufferOut != null) {
                    mBufferOut.write(message);
                    mBufferOut.flush();
                }
            }
        };
        Thread thread = new Thread(runnable);
        thread.start();
    }

Когда я получаюданные, все данные свыше 127 в значениях возвращаются как «231, 191, 189». Когда я отправляю данные, каждый байт со значением x более 127 возвращается как «195, x».

Как я могу решить эту проблему?

1 Ответ

0 голосов
/ 04 октября 2019

Я не думаю, что отправка String в виде массива char и использование String.valueOf() для его восстановления - правильный путь.

String уже имеет механизм для преобразования себяв / из байтов:

byte[] bytes = text.getBytes("UTF-8");
...
String text = new String(bytes, "UTF-8");

Попробуйте использовать эти 2 метода для преобразования String в byte[] и наоборот.

...