2012-03-13 119 views
1

我正在实施Android客户端和桌面服务器应用程序。在客户端,我扩展了用于发送和接收TCP消息的Thread类。它会处理我的信息,并根据信息的含义做一些事情。但消息不会从服务器到客户端..它不会出现在我的线程缓冲读取器。 我是android新手。我在哪里错过了一点? 我的线程可以不在后台工作吗?Android客户端TCP套接字

public class ConnectionHandler extends Thread { 

private Socket mySocket; 
public static BufferedReader in; 
public static PrintWriter out; 

private Login login; 

public ConnectionHandler(Socket socket,Login login) throws IOException{ 
    mySocket = socket; 
    in = new BufferedReader(new InputStreamReader(mySocket.getInputStream())); 
    out = new PrintWriter(new OutputStreamWriter(mySocket.getOutputStream())); 
    this.login = login; 
} 

public static void writeToOut(String msg){ 
    out.write(msg); 
    out.flush(); 
    out.close(); 
} 

public static void LoginMessage1ToOut(String emailField,String passField){ 
    String msg = "1;"+emailField+";"+passField+";"; 
    Log.d("LoginMsg1",msg); 
    writeToOut(msg); 
} 

@Override 
public void run() { 

    try{ 
     while(true){ 
      String cameString = in.readLine(); 
      String[] tokens = cameString.split(";"); 
      Log.d("*msg",cameString); 
      if(tokens[0].equals("2")){ 
       if(tokens[1].equals("positive")){ 
        login.enterIn(); 
       }else{ 
        login.somethingWrong("Inputs doesnot match.Please re-type."); 
       } 
      } 

     } 
    }catch(Exception es){} 
} 
} 

此线程类使用登录活动创建。

回答

-1

我觉得应该是:

while (true) { 
    try { 
    String cameString = in.readLine(); //This line maybe throw an error like timeout 
     //check not null 
     if(cameString != null){ 

      String[] tokens = cameString.split(";"); 
      Log.d("*msg",cameString); 
      if(tokens[0].equals("2")){ 
       if(tokens[1].equals("positive")){ 
        login.enterIn(); 
      }else{ 
       login.somethingWrong("Inputs doesnot match.Please re-type."); 
      } 
      } 
     } 

} catch (Exception e) { 
     //Ignore the error 
} 
} 
+0

请添加你的代码做什么的一些描述。 – HCarrasko 2016-03-10 12:55:27