请教大家一个问题,在Linux上使用开发网络程序,使用socket侦听一个端口(9000),程序启动后使用netstat查看,9000端口状态是listen的,经过一段时间后【可能出现网络断开的情况】,在使用netstat -an|grep 9000就发现没有这个端口了
我单独使用一个线程去accept客户端的请求
线程启动后,首先让ServerSocketChannel先绑定一个端口
然后无线循环一直在做accept我想问的问题是:如果bind没有问题,在什么情况下,该ServerSocketChannel不再侦听某个端口,在什么情况下ServerSocketChannel会断开自己的侦听端口我首先确保线程没有终止,线程初始化时执行了一次bind,在线程的run方法中无线循环去accept先谢谢了!socket网络

解决方案 »

  1.   

    只学到线程这里,给个最近的代码段,你试试看看端口会不会自己释放掉
    bind不懂是什么,linux环境没试过
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;public class ServerSocketTest extends Thread
    {
    private ServerSocket serverSocket; public ServerSocketTest()
    {
    try
    {
    serverSocket = new ServerSocket(9000);
    }
    catch (IOException e)
    {
    // 如果端口被占这里就会说异常
    e.printStackTrace();
    }
    } @Override
    public void run()
    {
    while (true)
    {
    try
    {
    Socket socket = serverSocket.accept(); // {..................}操作代码 }
    catch (IOException e)
    {
    e.printStackTrace();
    }
    }
    }}
      

  2.   

    端口没有被占用,如果端口占用,bind端口是会提示端口占用的错误
      

  3.   

    谢谢大家的回答
    我想问的是,当某个端口被正常侦听后,在什么情况下可以释放该端口不再被侦听(程序终止,死机除外)还有就是,例如:tomcat启动,正常侦听8080端口,此时使用什么工具在不停止tomcat服务器下,让它不再侦听8080端口
      

  4.   

    个人感觉,端口是随着线程的,只有先申请端口的线程结束或者中止的时候端口才会被释放。
    楼上的疑问的解释应该就是就是正常监听8080端口的情况下不在监听端口,在不修改tomcat源码的基础下,应该只能结束监听的线程。