Сокет простой текстовый ответ обрезан - PullRequest
1 голос
/ 06 марта 2012

У меня проблемы с установкой сокетного соединения между Android (клиент) и приложением c # (сервер) для правильного чтения ответа.

Я успешно получил сообщение, отправленное с android на c #, и я прекрасно его читаю. Но когда я пытаюсь отправить подтверждение обратно на Android, я не знаю, как правильно справиться с этим, и мне пришлось сделать некоторые предположения, где учебники были неясными. Я получаю ответ на Android, но это не на 100% правильно. Я проверил через Wireshark, что c # отправляет то, что я хочу, и текст выглядит нормально, пока не доберется до android.

C#:
    public void SendClientMessage()
    {
        NetworkStream clientStream = _Client.GetStream();
        ASCIIEncoding encoder = new ASCIIEncoding();
        byte[] buffer = encoder.GetBytes("Hello Client!");  //Static test message

        clientStream.Write(buffer, 0, buffer.Length);
        clientStream.Flush();
    }

...

Android:
    private void listenResponse()
    {
        Log.i(TAG, "listenRespose() Listening...");
        try
        {
           InputStream is = socket.getInputStream();
           BufferedInputStream bis = new BufferedInputStream(is);
           byte[] buffer = new byte[1024];
           int countBytesRead = bis.read(buffer, 0, 8);
           String response = new String(buffer);
           Log.i(TAG, "listenResponse() Heard: " + response);
        }
        catch (IOException e)
        {
           Log.e(TAG, "listenResponse() IOException", e);
           e.printStackTrace();
        }
        Log.i(TAG, "listenResponse() Done Listening.");
    }

...

WireShark shows:
    Hello Client!

...

Android LogCat shows:
    listenRespose() Listening...
    listenResponse() Heard: Hello Cl??????????????????????????? [... ?s continue for a long time]
    listenResponse() Done Listening.

Если вместо этого я инициализирую свою строку следующим образом:

String response = new String(buffer, 0, countBytesRead);

Я не получаю все вопросительные знаки по крайней мере, но я все еще не получаю полную строку, которую я должен получить. Я неправильно инициализирую свой байт [], или есть другой способ сделать это более подходящим для простого текста?

1 Ответ

2 голосов
/ 06 марта 2012

Вы читаете только 8 байтов здесь

int countBytesRead = bis.read(buffer, 0, 8);
//                     max bytes to read ^

Вместо этого прочитайте все, что можете:

int countBytesRead = bis.read(buffer, 0, Buffer.length);

Вы видите вопросительные знаки, потому что ваш буфер не инициализирован.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...