Вопрос

Мне нужно использовать соединение сокета 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);

        }
}
}
.

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

Это было полезно?

Решение

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top