各位好,小弟又来求助了flag2是一个全局变量一个serversocket,我用
flag1=true;
while(flag1)
{
if(flag2==false)
{flag1=false;
continue;
}
else
{
Socket s = null;
s=serversocket.accept();
//下面的代码是用线程去处理s
}
}我在另外一段代码中将flag2置为false,但在这之后,还可以有一个客户端连进来,这是为什么呢,flag2一旦为false后不是就应该跳出这个while了吗,就执行不到serversocket.accept()了呀请各位指教

解决方案 »

  1.   

    你是不是以为flag1=false;就会立既停啊?完全不是地。
    代码走到这行s=serversocket.accept(); 就会一直处于等待连接状态,直到有一个连接来,它才继续往下走。 所以呢,部分服务器一般是强杀进程。
      

  2.   

    continue 是跳出本次循环 进入下次循环
    你断点或者打出信息看看 flag2的值是否在改变前 这个客户端已经进入循环了
    话说 if(flag2==false) boolean 不需要这么写  if(!flag2)
      

  3.   

    这段代码的逻辑没有问题,运行到flag1=false;continue;就会跳出循环。
    但是上一次的serversocket.accept()运行之后,他会一直等待到接受下一次请求,循环等待。
    因此它是先接受请求,然后再进入下一个循环,执行flag1=false;continue;再结束循环。
      

  4.   

    我试了用interrupt()也不起作用,还是一样的结果
      

  5.   


    interrupt()这个方法不是一个结束进程的好方法,建议尽量不要用
      

  6.   

    s=serversocket.accept();这个是阻塞的,服务器会一直等待客服端的连接,如果没有连接就会一直等待,程序阻塞在这里。
      

  7.   

    虽然跳出的循环,但上一次的serversocket.accept()运行之后,一直等待到接受下一次请求,
    此时有什么办法 能将serversocket关闭吗,我一关就报错
      

  8.   

    我自己想了个办法 ,有服务 器这边设置flag1为false的同时,new 一个socket让serversocket.accept去接受这种方法不知有没有什么影响 ,程序 能正常跑起来
      

  9.   

    accept()是一个阻塞式的方法,楼主肯定是忘了吧....
      

  10.   

    各有不用的优势吧,MAP无法直接迭代。比较遗憾~