ошибка при создании клиентского сокета - PullRequest
1 голос
/ 09 апреля 2011

Я пытаюсь подключить два эмулятора в Android, один считается сервер, а другой клиент. Я использую текстовое представление и обработчик для публикации состояния клиента и сервера. Проблема с моим клиентом заключается в том, что я могу создать сокет, и обычно я получаю сообщение об ошибке, размещаемое в текстовом представлении. Не только это, но когда я пытаюсь нажать кнопки в клиентском приложении, меня принудительно закрывают, и я не не знаю почему, потому что у меня есть другой поток для подключения клиента:)

Может кто-нибудь сказать мне, что я делаю не так?

Вот мой код:

публичный класс screen1 расширяет действие {

private TextView clientState;
private String serverIpAddress="10.0.2.2";
public static final int ClientPort = 8080;
private boolean connected = false;
private Handler handler=new Handler();
Socket socket;
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.screen1);
    clientState = (TextView) findViewById(R.id.client_Status);

    Button b = (Button)findViewById(R.id.mainMenu);
    b.setOnClickListener(new View.OnClickListener() {
       public void onClick(View arg0) {
       Intent i = new Intent(screen1.this, screen2.class);
       startActivity(i);
       } 
    });

   Thread cThread=new Thread(new ClientThread()); 
  cThread.start();  
  }
public class ClientThread implements Runnable{
    public void run()
    {
        try
        {
            InetAddress serverAddr=InetAddress.getByName(serverIpAddress);
            handler.post(new Runnable(){
                public void run(){
                    clientState.setText(" try to connect!");
                }
            });
            socket=new Socket(serverAddr,ClientPort);

            handler.post(new Runnable(){
                public void run(){
                    clientState.setText("Connected!");
                }
            });

        }
        catch(Exception e){
            handler.post(new Runnable(){
                public void run(){
                    clientState.setText("Error");
                    }
            });

            e.printStackTrace();
        }

    }
}
protected void onStop() {
    super.onStop();
    try {
         // make sure you close the socket upon exiting
         socket.close();
     } catch (IOException e) {
         e.printStackTrace();
     }
}

}

1 Ответ

1 голос
/ 09 апреля 2011

Я не очень хорош в программировании на Android, но вижу, что вы вводите бесконечный цикл в вашем коде:

while(true){
        handler.post(new Runnable(){
            public void run(){
                clientState.setText("Connected!");
            }
        });
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...