проблема с tcp-сокетом на Android

#android

#Android

Вопрос:

Мне нужно использовать соединение с tcp-сокетом для получения данных из bluebox, если я введу комментарий, такой как «getcolor», bluebox отправит мне информацию типа «красный, синий». В этом случае bluebox является сервером, и мне не нужно программировать на нем, но у меня проблема с отображением информации в EditText.

 public class sender {
public static void main(String[] args)throws IOException{

        Socket socket = new Socket("192.168.1.176",14111);

        OutputStream out = socket.getOutputStream();

        BufferedReader msg = new BufferedReader(new InputStreamReader(System.in)); 
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));         
         PrintWriter ou = new PrintWriter(new BufferedWriter(new OutputStreamWriter(out)),true);

         String buffer = new String("");
         String ms = "";
      while(true)
      {
          while(in.ready())

              buffer = in.readLine()  "n";
          String[] line = buffer.split("n");

          while(msg.ready())
              ms = msg.readLine();
          if(ms.equals("exit"))
          {
              break;
          }
          if(!ms.equals(""))
          {
              ou.println(ms);
              ou.flush();
              ms = "";
          }
          if(!buffer.equals(""))
          {

              System.out.print(buffer);
              buffer = "";

          }

      } 

      in.close();
      out.close();
      socket.close();

}
}
  

этот Java-код работает, но в приведенном ниже коде Android происходит сбой:

 public class BlueBoxApp extends Activity {
/** Called when the activity is first created. */

Context appInstance = this;
private EditText info;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
           info = (EditText)findViewById(R.id.EditText01);
    try{

        InetAddress serverAddr = InetAddress.getByName("192.168.1.176");//TCP服务器IP地址

            Log.d("TCP", "server,receiving...");

          Socket socket = new Socket(serverAddr,14111);


           try {   


           OutputStream out = socket.getOutputStream();
           BufferedReader msg = new BufferedReader(new InputStreamReader(System.in)); 
           BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));          
         PrintWriter ou = new PrintWriter(new BufferedWriter(new OutputStreamWriter(out)),true);

            String buffer = new String("");
            String ms = "getsensorno";
            Log.d("TCP", "sending:'" ms "'");
        while(true)
        {
          while(in.ready())

              buffer = in.readLine()  "n";

          while(msg.ready())
              ms = msg.readLine();
          if(ms.equals("exit"))
          {
              break;
          }
          if(!ms.equals(""))
          {
              ou.println(ms);
              ou.flush();
              ms = "";
          }
          if(!buffer.equals(""))
          {

             info.setText(buffer);
            buffer = "";

          } 
        } 

            } catch (Exception e) {

            Log.e("TCP", "error",e);

        }finally{

            socket.close();

        }

        }catch(Exception e){

           Log.e("TCP", "error",e);

        }
}
}
  

в чем проблема и как настроить поток для нее? Спасибо!

Комментарии:

1. Что является исключением? Может быть, он не может подключиться к Интернету из эмулятора?

2. В чем именно проблема?

Ответ №1:

Проблема, как вы указали, заключается в том, что вы выполняете сетевую часть в основном потоке.

Установить новый поток несложно, рассмотрите возможность использования AsyncTask. Пожалуйста, прочитайте документацию (которая очень хороша), прежде чем переходить к ее реализации, это значительно упростит ИМХО.

Кроме того, убедитесь, что у вас есть разрешение на доступ в Интернет в вашем AndroidManifest.xml