标签:需要 阻塞 poi 解析 get target 绑定 stat 安全
作者:jijs
链接:http://www.jianshu.com/p/7c0722a8b66f
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
构造一个ServerSocket,但不绑定任何端口,所以也不能接受任何的请求连接。以后可以通过bing()方法来进行绑定。
通过一个端口来构造一个ServerSocket对象。
默认的tcp队列大小为50.
默认监听本地所有的ip地址(如果有多个网卡)。
1 TCP分为全连接队列和半连接队列。这里说的是全连接队列 2 半连接队列:第一次握手,服务器收到客户端的请求时,该请求连接放到半连接队列中。 3 全连接队列:已经通过三次握手后,把当前连接信息存放到全连接队列中。全连接队列中的连接等待ServerSocket.accpt()处理。
通过一个端口和TCP队列大小来构造一个ServerSocket对象。
默认监听本地所有的ip地址(如果有多个网卡)。
通过一个端口、TCP队列大小和一个InetAddress 来构造一个ServerSocket对象。
一个服务器可能有多个网卡,多个ip地址,通过此构造传入一个InetAddress ,可以只监听从此网卡过来的请求连接。
比如:一个电脑上有两个网卡,一个是外网地址,一个是内网地址。为了安全此ServerSocket只允许监听内网ip地址的请求,而不接收外网请求。
通过无参构造的ServerSocket对象,需要bing方法进行绑定操作才能处理客户端的请求。
1 public void bind(SocketAddress endpoint) throws IOException { 2 bind(endpoint, 50); 3 } 4 5 public void bind(SocketAddress endpoint, int backlog) throws IOException { 6 ... 7 }
1 public Socket accept()
该方法会从全连接队列中获取一个客户端Socket请求。该方法是阻塞方法。如果当前没有请求的连接,则会一直阻塞,直到有客户端连接请求为止。
如果构造ServerSocket中默认端口传入一个0,则是随机生成一个端口,这时就需要使用此方法来获取端口信息。
通过源码发现该方法内部获取本地地址是通过调用getInetAddress()方法进行获取的。获取端口是通过getLocalPort()方法获取的。
1 public static void main(String[] args) throws Exception { 2 for(int port=1; port<65535; port++){ 3 try{ 4 ServerSocket s = new ServerSocket(port); 5 }catch(IOException e){ 6 System.out.println("当前系统中已经使用的端口:"+port); 7 } 8 } 9 }
运行结果如下:
标签:需要 阻塞 poi 解析 get target 绑定 stat 安全
原文地址:http://www.cnblogs.com/ios9/p/7473081.html