java.net.ServerSocket 解析
作者:jijs
链接:http://www.jianshu.com/p/7c0722a8b66f
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
构造
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);
}
}
}
运行结果如下:

java.net.ServerSocket 解析的更多相关文章
- java中poi解析excel(兼容07版本以上及以下:.xls和.xlsx格式)
package com.genersoft.cbms.ysbz.ExcelDr.cmd; import com.genersoft.cbms.ysbz.ExcelDr.dao.ExcelDrDao; ...
- java jar包解析:打包文件,引入文件
java jar包解析:打包文件,引入文件 cmd下: jar命令:package包打包 javac命令:普通类文件打包 Hello.java: package org.lxh.demo; publi ...
- Java构造和解析Json数据的两种方法详解二
在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面接着介绍用org.json构造和解析Jso ...
- 【Java】ServerSocket的学习笔记
公司有本<Java网络编程>一直闲置在书架上,反正我对Socket方面不太懂,今天跟着书学习一番. > 参考的优秀书籍 <Java网络编程> --中国电力出版社 > ...
- java集合框架之java HashMap代码解析
java集合框架之java HashMap代码解析 文章Java集合框架综述后,具体集合类的代码,首先以既熟悉又陌生的HashMap开始. 源自http://www.codeceo.com/arti ...
- java.net.ServerSocket和java.net.Socket
个人博客地址:http://www.cnblogs.com/wdfwolf3/ java.net.ServerSocket 1.构造函数 a.ServerSocket() 创建一个无连接的server ...
- Java注解全面解析(转)
1.基本语法 注解定义看起来很像接口的定义.事实上,与其他任何接口一样,注解也将会编译成class文件. @Target(ElementType.Method) @Retention(Retentio ...
- 单例模式——Java EE设计模式解析与应用
单例模式 目录: 一.何为单例 二.使用Java EE实现单例模式 三.使用场景 一.何为单例 确保一个类只有一个实例,并且提供了实例的一个全局访问点 1.1 单例模式类图 ...
- Java XML Dom解析工具
Java XML Dom解析工具 缩进等 transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); ...
随机推荐
- 让maven项目使用nexus作为远程仓库
让maven项目使用nexus作为远程仓库有两种方式,第一种是在项目的pom.xml中进行更改,让单个项目使用nexus仓库:另一种是通过修改maven的配置文件settings.xml进行更改,让所 ...
- java常用的运算符
Java 语言中常用的运算符可分为如下几种: Ø 算术运算符 Ø 赋值运算符 Ø 比较运算符 Ø 逻辑运算符 Ø 条件运算符
- pyqt5 设置窗口按钮等可用与不可用
setEnabled(True) 设置窗口或者按钮可用,Flase不可用
- python-requests-proxies判断学习
# coding:utf8 import requests def prox(): url = 'http://115.159.33.177/images/ip.php' ip_list = [ 'h ...
- 关于bottle WEB框架中签名cookie的一点理解
首先要理解一个概念 MAC (message authenticate code) 消息认证码(带密钥的Hash函数):密码学中,通信实体双方使用的一种验证机制,保证消息数据完整性的一种工具. 构造方 ...
- Python基础数据类型-列表(list)和元组(tuple)和集合(set)
Python基础数据类型-列表(list)和元组(tuple)和集合(set) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客使用的是Python3.6版本,以及以后分享的 ...
- mysql命令备份和还原
1.导出整个数据库 mysqldump -u用户名 -p密码 数据库名 > 导出的文件名 C:\Users\jack> mysqldump -uroot -pmysql sva_rec ...
- jackson的自动检测机制
jackson允许使用任意的构造方法或工厂方法来构造实例 使用@JsonAutoDetect(作用在类上)来开启/禁止自动检测 fieldVisibility:字段的可见级别 ANY:任何级别的字段都 ...
- 深度神经网络tricks and tips
1)data augmentation (augment 增加,aug:to increase 词根,同August(奥古斯特即凯撒大帝,自认为最伟大的帝王,他出生在八月,他以自己的名字命名这个月)同 ...
- 2018秋寒假作业4- -PTA编程总结1
PTA1打印沙漏.打印沙漏中的“沙漏形状”,就是每行输出的奇数符号与各行符号中心对齐:相邻两行符号数相差2:符号数从大到小递减到1,再从小到大递增.在做的时候出了几次错,编译发先是几个小地方出错了.以 ...