2011-02-03 4 views
2

소켓을 사용하여 서버에 연결하는 소프트웨어를 개발 중입니다.안드로이드에서 새 소켓을 기다리고있는 스레드를 멈추는 방법

connectionThread = new Thread(new Runnable() { 
    public void run() { 
     InetAddress serverAddress = InetAddress.getByName(ip); 
     serverSocket = new Socket(serverAddress, port); 
     //do more stuff 
     } 
    }); 
connectionThread.start(); 

클라이언트가 서버에 연결하지 않으면 스레드는 시간 초과에 도달 할 때까지 새로운 소켓이 반환 될 때까지 대기합니다.

사용자가 해당 작업을 취소 할 수있게하려고합니다. 사용자가 뒤로 버튼을 클릭하면 connectionThread.interrupt()으로 전화를 걸려고했습니다. 그러나 스레드는 계속 실행됩니다.

스레드가 새 소켓 타임 아웃까지 실행되도록 할 수는 있지만 매우 좋지 않다고 생각합니다.

답변

1

new Socket(serverAddress, port);을 사용하지 마십시오. 대신 new Socket()을 사용하여 새 소켓을 만든 다음 Socket.connect()을 사용하여 소켓을 연결하십시오. 이 방법을 사용하면

1) 연결 (SocketTimeoutException이 발생합니다)에 대한 타임 아웃을 지정할 수 있으며

2)) Socket.close() (SocketException가 발생합니다 사용하여 다른 스레드에서 프로세스를 취소 할 수 있습니다.

connectionThread = new Thread(new Runnable() { 
    public void run() { 
     try { 
      InetAddress serverAddress = InetAddress.getByName(ip); 
      serverSocket = new Socket(); 
      serverSocket.connect(new InetSocketAddress(serverAddress,port),TIMEOUTMS); 
      //do more stuff 
     } catch (SocketTimeoutException ste) 
     { 
      // connect() timeout occurred 
     } catch (SocketException se) 
     { 
      // socket exception during connect (e.g. socket.close() called) 
     } 
    }}); 
connectionThread.start(); 
: 여기

은 당신의 코드는이 방법을 사용하고 있습니다
관련 문제