2011-12-10 131 views
0

我在android中製作應用程序時,可以在用戶在Android鍵盤上輸入時向服務器C#發送字符代碼。
這是在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秒(我用測試方法得到字符,當用戶輸入時,它工作正常,不會延遲)。
我的問題在哪裏?提前致謝!

+0

您需要多線程處理您的服務器。 – Phil

+0

當然,上面的代碼放在線程中。 – R4j

回答

0

您的問題可能是由於Nagle's algorithm降低了TCP流量。考慮在您的客戶端上設置TCP_NODELAY服務器 - TcpClient.Client.NoDelay - 如果通信是雙向的)。

編輯:對於java它是Socket.setTcpNoDelay方法。

+0

謝謝,它適用於我。 – R4j