TCP-соединение иногда получает пробельные символы - PullRequest
0 голосов
/ 21 ноября 2018

В настоящее время я использую сокеты для связи между устройством Android и приложением C # (все в одной сети).Недавно я столкнулся с проблемой, которая иногда возникала при отправке данных из моего приложения для Android на C #.Мое приложение C # получает пробельные символы, а не данные, которые я отправил с Android.Когда я снова отправляю те же данные (после сбоя), появляются новые данные, но старые данные теряются.У меня такое ощущение, что пробельные символы - это данные, которые я ранее отправил, но каким-то образом "испортился"?Я не совсем уверен, что происходит.Вот весь соответствующий код.

Кроме этих случайных проблем, все остальное работает нормально.

BUFFER_SIZE - 1024 для обоих приложений.

Сторона Android (отправка данных):

SocketChannel s = SocketChannel.open();
s.configureBlocking(false);
s.connect(addr);

...

public void write(String data) throws IOException{
    Log.d("SocketClient","In Write method");

    ByteBuffer temp = ByteBuffer.allocate(BUFFER_SIZE);
    temp.clear();

    temp.put(data.getBytes());
    temp.flip();

    Log.d("SocketClient","In Write method: wrote: "+String.valueOf(temp.array()));

    while(temp.hasRemaining()){
        s.write(temp);
    }
}

Сторона C # (получение данных):

byte[] buffer = new byte[BUFFER_SIZE];
socket.BeginReceive(buffer, 0, BUFFER_SIZE, SocketFlags.None,
                   new AsyncCallback(ReadCallback), this.client);

...

public void ReadCallback(IAsyncResult ar)
{
    try
    {
        bytesRead = handler.EndReceive(ar);
    }catch(Exception e)
    {
        Console.WriteLine(e.StackTrace);
    }

    Console.WriteLine("In read callback data receieved");

    if (bytesRead > 0)
    {

        content = Encoding.ASCII.GetString(buffer, 0, bytesRead);

        Console.WriteLine("content is = " + content);
    }
}

В выводе консоли для содержимого я вижу пустые пробелы вместо данных, которые я должен получить.(Обратите внимание, что эта проблема возникает только изредка)

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