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

1

Мне нужно использовать соединение сокета tcp, чтобы получить данные из синего блока, если я введу комментарий, например "getcolor", синий ящик отправит мне информацию типа "красный, синий". В этом случае синий ящик как сервер, и мне не нужно его программировать, но у меня есть проблема, чтобы показать информацию об 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);

        }
}
}

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

  • 0
    Что является исключением? Может быть, он не может подключиться к интернету из эмулятора?
  • 0
    В чем именно проблема?
Теги:

1 ответ

3
Лучший ответ

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

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

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

  • 0
    Спасибо, теперь это работает!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню