java.net.ServerSocket 解析
来源:互联网 发布:詹姆斯总决赛场均数据 编辑:程序博客网 时间:2024/05/22 15:10
构造
public ServerSocket()
构造一个ServerSocket,但不绑定任何端口,所以也不能接受任何的请求连接。以后可以通过bing()方法来进行绑定。public ServerSocket(int port)
通过一个端口来构造一个ServerSocket对象。
默认的tcp队列大小为50.
默认监听本地所有的ip地址(如果有多个网卡)。
TCP分为全连接队列和半连接队列。这里说的是全连接队列
半连接队列:第一次握手,服务器收到客户端的请求时,该请求连接放到半连接队列中。
全连接队列:已经通过三次握手后,把当前连接信息存放到全连接队列中。全连接队列中的连接等待ServerSocket.accpt()处理。
public ServerSocket(int port, int backlog)
通过一个端口和TCP队列大小来构造一个ServerSocket对象。
默认监听本地所有的ip地址(如果有多个网卡)。public ServerSocket(int port, int backlog, InetAddress bindAddr)
通过一个端口、TCP队列大小和一个InetAddress 来构造一个ServerSocket对象。一个服务器可能有多个网卡,多个ip地址,通过此构造传入一个InetAddress ,可以只监听从此网卡过来的请求连接。
比如:一个电脑上有两个网卡,一个是外网地址,一个是内网地址。为了安全此ServerSocket只允许监听内网ip地址的请求,而不接收外网请求。
bind 方法
通过无参构造的ServerSocket对象,需要bing方法进行绑定操作才能处理客户端的请求。
public void bind(SocketAddress endpoint) throws IOException { bind(endpoint, 50);}public void bind(SocketAddress endpoint, int backlog) throws IOException {...}
- 通过SocketAddress 进行绑定,默认TCP队列大小为50。
- 通过SocketAddress 和 TCP请求队列大小 两个参数 进行绑定。
accept 方法
public Socket accept()
该方法会从全连接队列中获取一个客户端Socket请求。该方法是阻塞方法。如果当前没有请求的连接,则会一直阻塞,直到有客户端连接请求为止。
获取ServerSocket相关信息
- public InetAddress getInetAddress()
获取本地地址,如果本地有多个ip,随机返回一个。 public int getLocalPort()
获取绑定的端口。如果构造ServerSocket中默认端口传入一个0,则是随机生成一个端口,这时就需要使用此方法来获取端口信息。
public SocketAddress getLocalSocketAddress()
返回本地地址和端口。
通过源码发现该方法内部获取本地地址是通过调用getInetAddress()方法进行获取的。获取端口是通过getLocalPort()方法获取的。
使用ServerSocket 判断当前系统已经占用的端口
public static void main(String[] args) throws Exception { for(int port=1; port<65535; port++){ try{ ServerSocket s = new ServerSocket(port); }catch(IOException e){ System.out.println("当前系统中已经使用的端口:"+port); } }}
运行结果如下:
本人简书blog地址:http://www.jianshu.com/u/1f0067e24ff8
点击这里快速进入简书
GIT地址:http://git.oschina.net/brucekankan/
点击这里快速进入GIT
- java.net.ServerSocket 解析
- java.net.ServerSocket翻译
- java.net 类 ServerSocket
- java.net.ServerSocket详解
- java.net.ServerSocket
- java的serversocket.net实现方式
- 关于Java中的ServerSocket类与构造服务器的解析
- java-用java.net.Socket和java.net.ServerSocket实现简单的聊天程序
- 读ServerSocket.java心得
- java ServerSocket API 详解
- Java Socket和ServerSocket
- Java中ServerSocket源码
- 有关JAVA中的ServerSocket
- Java ServerSocket Socket
- JAVA Soket、ServerSocket通信
- [Java]Socket和ServerSocket
- 【Java学习笔记】39:简易Socket编程(基于java.net下的Socket和ServerSocket)
- 黑马程序员——java基础——ServerSocket、Socket构造方法解析
- C#WinForm为DataGrid添加下拉列表框
- Flask 框架知识收集
- 1-day(HTML标签)
- 装饰器的简单使用
- MVC+jQuery.Ajax异步实现增删改查和分页的实例
- java.net.ServerSocket 解析
- oracle常用函数整理
- Java通过阅读器书写器实现按编码读写字符
- plsqldev中写json
- Android 热修复技术
- 2017天梯赛决赛总结(2017/4/19)
- [转载]69道Spring面试题和答案
- Python学习随笔二:list和tuple
- 35对象5---window对象