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

绑定端口问题
请教大家一个问题,在Linux上使用开发网络程序,使用socket侦听一个端口(9000),程序启动后使用netstat查看,9000端口状态是listen的,经过一段时间后【可能出现网络断开的情况】,在使用netstat -an|grep 9000就发现没有这个端口了
我单独使用一个线程去accept客户端的请求
线程启动后,首先让ServerSocketChannel先绑定一个端口
然后无线循环一直在做accept

我想问的问题是:如果bind没有问题,在什么情况下,该ServerSocketChannel不再侦听某个端口,在什么情况下ServerSocketChannel会断开自己的侦听端口

我首先确保线程没有终止,线程初始化时执行了一次bind,在线程的run方法中无线循环去accept

先谢谢了!
socket 网络

------解决方案--------------------
代码,不然不好分析。
------解决方案--------------------
9000端口是你自己开的吗?
------解决方案--------------------
线程不死,端口就会被占用吧。不懂。
------解决方案--------------------
感觉运行的时候一直占用呢!!!
------解决方案--------------------
只学到线程这里,给个最近的代码段,你试试看看端口会不会自己释放掉
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();
}
}
}

}



引用:

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