如何在不使用while循环的情况下运行服务器?
发布时间:2020-12-15 04:58:12 所属栏目:Java 来源:网络整理
导读:我正在尝试使用DatagramSocket和DatagramPacket类创建一个服务器程序,但是我当前的代码使用了一个丑陋的while循环,它在服务器运行时也冻结了我的程序,但服务器运行良好而没有任何问题.无论如何,代码如下.无论如何我可以使用不同于while循环的东西或阻止while
我正在尝试使用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()调用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |