Задержка при отправке строки через сокет - PullRequest
0 голосов
/ 10 декабря 2011

Я делаю приложение в Android, может отправлять код символа на сервер C # при вводе пользователем на клавиатуре Android.
Это метод отправки на стороне Android:

  public Boolean writeMessage(String message) {
    try {               
        printWriter = new PrintWriter(socket.getOutputStream(), true);
        printWriter.println(message);
        return true;
    } catch (Exception ex) {
        Log.e(TAG,"write error: " +ex.getMessage());
        return false;
    }
}

И сервер прослушивает сообщения (C #):

     Thread myThread = new Thread(new ThreadStart(ServeClient));
     myThread.Start();

     void ServeClient(){
          StreamReader reader = new StreamReader(tcpClient.GetStream());     
          while (true)
          {
            try
            {
                String message = reader.ReadLine();
                if (message != null)
                {                     
                    Console.WriteLine(message);         
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }

Мой код работает, но когда пользовательский ввод быстрее, сервер задерживает чтение сообщения через 1,2 или 3 секунды (я тестировал метод получения символа при пользовательском вводе, он работает нормально, не задерживается)
Где моя проблема? Заранее спасибо!

1 Ответ

0 голосов
/ 10 декабря 2011

Ваша проблема может быть вызвана алгоритмом Нейгла , уменьшающим трафик TCP.Попробуйте установить TCP_NODELAY на своем клиенте ( и сервер - TcpClient.Client.NoDelay - если связь двусторонняя).

Редактировать: Для Java это Socket.setTcpNoDelay метод.

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