2013-12-11 2 views
1

나는 UDP 서버로 멀티 플레이어 게임을하고 있는데 루프의 첫 번째 반복 이후 서버 스레드가 멈추는 이유를 모르겠습니다. 여기Android 액티비티에서 무작위로 멈춤

public class GameActivity extends Activity { 

public ServerUDP t; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
          WindowManager.LayoutParams.FLAG_FULLSCREEN); 

    setContentView(R.layout.activity_game); 
    t = new ServerUDP(); 
    t.setRunning(true); 
    t.start(); 
} 

@Override 
protected void onPause() 
{ 
    super.onPause(); 
    t.setRunning(false); 
    t.interrupt(); 
} 


@Override 
protected void onDestroy() 
{ 
    super.onDestroy(); 
    t.setRunning(false); 
    t.interrupt(); 

} 
} 

와 서버 코드 : 다음은 스레드를 시작하는 활동의 코드가

public class ServerUDP extends Thread 
{ 
    private boolean mRun; 

    private DatagramSocket serverSocket ; 
    private byte[] receiveData; 
    private byte[] sendData; 
    private int ServerPort = 9000; 

    ServerUDP() 
    { 
     try { 
      if(serverSocket == null) 
      { 
       serverSocket = new DatagramSocket(null); 
       serverSocket.setReuseAddress(true); 
       serverSocket.bind(new InetSocketAddress(ServerPort)); 
       receiveData = new byte[1024]; 
       sendData = new byte[1024]; 
      } 
     } catch (SocketException e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public void run() 
    { 
     while (mRun) 
     { 
      Log.v("socket","in loop"); 
      sendData = "test".getBytes(); 
      InetAddress local; 
      try { 
       local = InetAddress.getByName("10.0.2.2"); 
       Log.v("socket","Sent"+sendData); 
       DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length,local, 8088); 
       serverSocket.send(sendPacket); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 


      DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); 
      try { 
       serverSocket.receive(receivePacket); 
      String receiveString = new String(receivePacket.getData()); 
      Log.v("RECEIVED",receiveString); 
      } catch (IOException e1) { 
       e1.printStackTrace(); 
      } 
     } 
    } 
    public void setRunning(boolean b) 
    { 
     mRun = b; 
    } 

}

문제는 내가 단 하나의 "루프"얻을 것입니다 메시지. 내 스레드가 하나의 루프 후에 죽는 것 같습니다. 내가 디버그 모드에서 확인하고 아직 살아 있지만 서버 루프를 다시 통과하지 않습니다.

왜 그런가?

답변

0

귀하의 스레드가 send() 또는 서버에서 응답을 기다리는 중 호출을 차단하고있는 것 같습니다.

0

IOException (RuntimeException에서 파생 된 검사되지 않은 예외) 이외의 예외가 발생했을 수 있습니다. run 방법의 모든 내용을 try ... catch(Exception e) 블록에 넣어보세요.

+0

나는 그것을 시험해 보았다. 0 예외가있다. –

관련 문제