gpt4 book ai didi

java - 如何在不使用 while 循环的情况下运行服务器?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:35:00 24 4
gpt4 key购买 nike

我正在尝试使用 DatagramSocket 和 DatagramPacket 类制作服务器程序,但我当前的代码使用了一个丑陋的 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
}
}
}

最佳答案

你应该把它放在一个新线程中。接收数据包的过程涉及同步 IO,因此它总是会阻塞它正在运行的线程。

澄清一下,并不是 while 循环本身让程序的其余部分等待。这是 socket.receive() 调用。

关于java - 如何在不使用 while 循环的情况下运行服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11492164/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com