通过套接字发送字符串时延迟

时间:2011-12-10 15:21:09

标签: c# android sockets

我在Android上创建一个应用程序,当用户在Android键盘上输入时,可以将字符代码发送到服务器C#。
这是android方面的send方法:

  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 :(得分:0)

您的问题可能是由Nagle's algorithm减少TCP流量引起的。考虑在您的客户端设置TCP_NODELAY服务器 - TcpClient.Client.NoDelay - 如果通信是双向的)。

编辑:对于java,它是Socket.setTcpNoDelay方法。