2013-12-11 84 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个异常。 –