2011-12-10 3 views
0

안드로이드에서 응용 프로그램을 만들면 서버 C# 사용자가 안드로이드 키보드에 입력 할 때 문자 코드를 보낼 수 있습니다.지연 소켓을 통해 문자열을 보낼 때

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 - 통신이 양방향 인 경우)을 설정하는 것이 좋습니다.

편집 : 자바의 경우 Socket.setTcpNoDelay 메서드입니다.

+0

고마워, 그것은 나를 위해 작동합니다. – R4j

관련 문제