【发布时间】:2013-12-11 20:23:04
【问题描述】:
我正在使用 UDP 服务器开发多人游戏,但我不明白为什么我的服务器线程在其循环的第一次迭代后自行停止。这是启动线程的 Activity 的代码:
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;
}
}
问题是我只收到一条“循环中”消息。我的线程似乎在一个循环后死了。我在调试模式下进行了检查,它仍然存在,但它不再通过服务器循环。
有什么想法吗?
【问题讨论】:
标签: java android multithreading android-activity