日期:2014-05-20  浏览次数:20755 次

一个关于终结循环的问题
我写了个client 里面有循环等待接受server的信息 代码如下:

public class multicastClinet{
  public static void main(String[] args) throws Exception{
  //输入port
  System.out.println("Enter your port number :");
  Scanner sc1 = new Scanner(System.in);
  String port = sc1.nextLine();
  //选择签名到服务器上
  System.out.println("1.subscribe");
  System.out.println("Enter :");
  Scanner sc = new Scanner(System.in);
  int choose = sc.nextInt();
  //如果是1 签名到服务器上
  if(choose == 1){
  //转换格式
  int portc = Integer.parseInt(port);
  //建立udp
  DatagramSocket ds = new DatagramSocket();
  //转换格式
byte[] buf = port.getBytes();
DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),40621);
  //发送
  ds.send(dp);
  //关闭
  ds.close();
 
  //再建一个udp
  DatagramSocket ds1 = new DatagramSocket(portc);
  boolean flag = true;
  //循环
  while(flag){
  //此时服务器会定时给签名的客户端发送时间
  byte[] buffer = new byte[1024];  
  DatagramPacket dp1 = new DatagramPacket(buffer,buffer.length);
  System.out.println("Waiting for receive .");
  ds1.receive(dp1);
  }
}

我的问题是如何能终止这个while循环? receive每次都会把程序卡在那等待数据,有没有办法能在卡住的同时停止掉loop?

------解决方案--------------------
要终止while循环,只需要在while最后的地方break或者设置flag=false就可以了,但估计LZ的本意应该不是这样,是想让主线程不被阻塞吧,这个本来就是阻塞式的,如果不想让主线程阻塞等待,可以交给一个线程去处理,主线程继续执行别的

------解决方案--------------------
不是要中止循环,而是要多开一个线程啊。
------解决方案--------------------
楼主可以指定一个输入的字符串,标识输入结束,当输入碰到这个字符串你就break就好了