我正在嘗試使用DatagramSocket和DatagramPacket類來製作服務器程序,但我當前的代碼使用了一個醜陋的while循環,它在服務器運行時也凍結了我的程序,但服務器正常運行並沒有問題。無論如何,代碼如下。無論如何,我可以使用不同於while循環的東西,或防止while循環阻止程序中的任何其他代碼執行?如何在不使用while循環的情況下運行服務器?
protected void run() {
try {
socket = new DatagramSocket(port);
socket.setBroadcast(true);
} catch (Exception e) {
e.printStackTrace();
stopServer(); //stop the server
return;
}
while(isRunning()){ //hate this loop
try {
byte[] buf = new byte[256];
DatagramPacket packet = new DatagramPacket(buf, 256);
socket.receive(packet);
DatagramPacket serverPacket;
byte[] serverBuf;
byte hb = 0;
byte lb = packet.getData()[0];
int e = ((int)hb<<8)|((int)lb&0xFF); //translate byte to int
switch(e) {
case 2:
//do something
break;
case 5:
//do something
break;
case 7:
//do something
break;
default:
//default stuff
break;
}
} catch (Exception e) {
System.out.println("Fatal Server Error:");
e.printStackTrace();
stopServer(); //stop the server
return; //stop the method
}
}
}
[threads](http://docs.oracle.com/javase/tutorial/essential/concurrency/)? – 2012-07-15 13:15:32