2014-09-25 4 views
0

TCP 소켓이있는 Android 장치 - PC와 통신 중입니다. 성공적으로 서버에 네트워크 패킷을 보냈지 만 서버에서 응답을 받으면 스레드가 원인을 알지 못합니다. 안드로이드 클라이언트 :알 수없는 원인으로 안드로이드 스레드가 멈 춥니 다.

public class ClientThread implements Runnable 
{ 
    public void run() 
    { 
     try 
     { 
       Socket socket = new Socket("192.168.1.12", 4444); 

       BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); 
       out.write(msg); 
       out.flush(); 

       Log.v("Naber", "One"); 

       InputStreamReader inputStreamReader = new InputStreamReader(socket.getInputStream()); 
       BufferedReader bufferedReader = new BufferedReader(inputStreamReader); // get the client message 
       String inMsg = bufferedReader.readLine(); 
       inputStreamReader.close(); 
       Log.v("Naber", "Two"); 
       socket.close(); 

     } 
     catch (Exception e) 
     { 
      Log.v("Hata", e.getMessage()); 
     } 
    } 
} 

로그인 자세한 정보 출력 : C 번호와

String inMsg = bufferedReader.readLine(); 

내 서버 응용 프로그램 : 그것은이 라인에 왔을 때 멈출 않는 이유를 모르겠어요

09-25 22:25:37.163 15351-15532/com.mytracia.kumanda9 V/Naber﹕ One 

static void Main(string[] args) 
    { 
     TcpListener tcpListener = new TcpListener(IPAddress.Any, 4444); 
     while (true) 
     { 
      tcpListener.Start(); 
      //Program blocks on Accept() until a client connects. 
      Socket soTcp = tcpListener.AcceptSocket(); 
      Byte[] received = new Byte[1024]; 
      int bytesReceived = soTcp.Receive(received, received.Length, 0); 
      String dataReceived = System.Text.Encoding.ASCII.GetString(received); 
      dataReceived = dataReceived.Replace("\0", ""); 
      Console.WriteLine(dataReceived); 
      String returningString = "Naber1"; 
      Byte[] returningByte = System.Text.Encoding.ASCII.GetBytes(returningString.ToCharArray()); 
      //Returning a confirmation string back to the client. 
      soTcp.Send(returningByte, returningByte.Length, 0); 
      tcpListener.Stop(); 
     } 
    } 

답변

1

서버 응답에 새로운 라인이 있습니까? "\ n"

public String readLine() API 레벨 1에 추가되었습니다.이 리더에서 사용할 수있는 텍스트 을 반환합니다. 행은 '\ n', '\ r', '\ r \ n'또는 독자의 끝에 오는 0 또는 개의 문자로 표시됩니다. 문자열에는 개행 시퀀스가 ​​포함되지 않습니다.

판독기 끝에 도달하기 전에 문자를 읽지 않은 경우 줄의 내용을 반환하거나 null을 반환합니다.

시도 :

String returningString = "Naber1\n"; 
+0

당신이 무엇을 의미 했습니까? "\ nNaber1"과 같은 응답 메시지를 보내야합니까? – user1544101

+0

@ user1544101, 편집 된 답변보기 – user3439968

+0

그래, 고마워! – user1544101

관련 문제