代码如下:import java.io.IOException;
import java.net.ServerSocket;public class Main { public static void main(String[] args) {
if (open()) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
while (true) {
System.out.println("java------------");
}
}
} private static boolean open() { try {
ServerSocket ss = new ServerSocket(8011);
return true;
} catch (IOException e) {
return false;
} }
}问题:
socket开启端口以后,在执行sleep阶段,在cmd中通过
 netstat -aon|findstr "8011"
是可以看到端口确实在开启状态并且能看到进程号。
在sleep结束以后,进入
while(true){}循环,
在执行上面的命令,发现端口已经关闭,
请问,为什么程序走到whiletrue里面以后,socket就关闭呢?

解决方案 »

  1.   

    执行完了吧,应该在while循环加ss.accept();不停地等待接收来自客户端的请求吧。这个是阻塞式的。。
      

  2.   

    这个ss的socket创建后,并没有做其他操作,比如accept都没有,所以他new完就销毁了,因为没有用。
      

  3.   

    情况是这样的饿
    如果不是while循环 是其他的 比如说 new classpathApplictioncotext();
    只要spring容器不结束,socket就一直存在。
    只是当while循环的时候,socket则个端口,在系统里就找不到了