注:本文来自:简书:jianshu

作者:jijs
链接:http://www.jianshu.com/p/7c0722a8b66f
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

构造

  1. public ServerSocket()

    构造一个ServerSocket,但不绑定任何端口,所以也不能接受任何的请求连接。以后可以通过bing()方法来进行绑定。

  2. public ServerSocket(int port)

    通过一个端口来构造一个ServerSocket对象。
    默认的tcp队列大小为50.
    默认监听本地所有的ip地址(如果有多个网卡)。

 TCP分为全连接队列和半连接队列。这里说的是全连接队列
半连接队列:第一次握手,服务器收到客户端的请求时,该请求连接放到半连接队列中。
全连接队列:已经通过三次握手后,把当前连接信息存放到全连接队列中。全连接队列中的连接等待ServerSocket.accpt()处理。
  1. public ServerSocket(int port, int backlog)

    通过一个端口和TCP队列大小来构造一个ServerSocket对象。
    默认监听本地所有的ip地址(如果有多个网卡)。

  2. 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 {
...
}
  1. 通过SocketAddress 进行绑定,默认TCP队列大小为50。
  2. 通过SocketAddress 和 TCP请求队列大小 两个参数 进行绑定。

accept 方法

 public Socket accept()

该方法会从全连接队列中获取一个客户端Socket请求。该方法是阻塞方法。如果当前没有请求的连接,则会一直阻塞,直到有客户端连接请求为止。

获取ServerSocket相关信息

  1. public InetAddress getInetAddress()

    获取本地地址,如果本地有多个ip,随机返回一个。

  2. public int getLocalPort()
    获取绑定的端口。

如果构造ServerSocket中默认端口传入一个0,则是随机生成一个端口,这时就需要使用此方法来获取端口信息。

  1. 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 解析的更多相关文章

  1. java中poi解析excel(兼容07版本以上及以下:.xls和.xlsx格式)

    package com.genersoft.cbms.ysbz.ExcelDr.cmd; import com.genersoft.cbms.ysbz.ExcelDr.dao.ExcelDrDao; ...

  2. java jar包解析:打包文件,引入文件

    java jar包解析:打包文件,引入文件 cmd下: jar命令:package包打包 javac命令:普通类文件打包 Hello.java: package org.lxh.demo; publi ...

  3. Java构造和解析Json数据的两种方法详解二

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面接着介绍用org.json构造和解析Jso ...

  4. 【Java】ServerSocket的学习笔记

    公司有本<Java网络编程>一直闲置在书架上,反正我对Socket方面不太懂,今天跟着书学习一番. > 参考的优秀书籍 <Java网络编程> --中国电力出版社 > ...

  5. java集合框架之java HashMap代码解析

     java集合框架之java HashMap代码解析 文章Java集合框架综述后,具体集合类的代码,首先以既熟悉又陌生的HashMap开始. 源自http://www.codeceo.com/arti ...

  6. java.net.ServerSocket和java.net.Socket

    个人博客地址:http://www.cnblogs.com/wdfwolf3/ java.net.ServerSocket 1.构造函数 a.ServerSocket() 创建一个无连接的server ...

  7. Java注解全面解析(转)

    1.基本语法 注解定义看起来很像接口的定义.事实上,与其他任何接口一样,注解也将会编译成class文件. @Target(ElementType.Method) @Retention(Retentio ...

  8. 单例模式——Java EE设计模式解析与应用

    单例模式 目录: 一.何为单例 二.使用Java EE实现单例模式 三.使用场景 一.何为单例 确保一个类只有一个实例,并且提供了实例的一个全局访问点 1.1 单例模式类图               ...

  9. Java XML Dom解析工具

    Java XML Dom解析工具 缩进等 transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); ...

随机推荐

  1. mybatis插入数据后返回自增的主键id

    在插入数据时候想自动返回mysql的自增的主键,需要在mapper.xml中配置下: <insert id="insert" parameterType="com. ...

  2. python 面向对象之多态

    多态是什么? 用一句话来概括下,多态就是同一操作(方法)作用于不同的对象时,可以有不同的解释,产生不同的执行结果. #!/usr/bin/env python # -*- coding: utf-8 ...

  3. 决策树--信息增益,信息增益比,Geni指数的理解

    决策树 是表示基于特征对实例进行分类的树形结构       从给定的训练数据集中,依据特征选择的准则,递归的选择最优划分特征,并根据此特征将训练数据进行分割,使得各子数据集有一个最好的分类的过程.   ...

  4. python爬虫-采集英语翻译

      http://fanyi.baidu.com/?aldtype=85#en/zh/drughttp://fanyi.baidu.com/?aldtype=85#en/zh/cathttp://fa ...

  5. 函数和常用模块【day04】:高阶函数(七)

    本节内容 1.介绍 2.具体实用 3.eval()函数 一.介绍 高阶函数:变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数. 二.具体实用 其实说白了,高阶函数功能就 ...

  6. MapReduce与关系型数据库的不同之处。

    MapReduce能够被视为RDBMS(关系型数据库)的补充. 1.MapReduce适合处理那些需要分析整个数据集的问题(日志分析等),以批处理的方式.RDBMS适合做点查询和更新. 2.MapRe ...

  7. Linux记录-shell一行代码杀死进程(收藏)

    ps -ef |grep hello |awk '{print $2}'|xargs kill -9

  8. POJ - 1426 Find The Multiple(搜索+数论)

    转载自:優YoU  http://user.qzone.qq.com/289065406/blog/1303946967 以下内容属于以上这位dalao http://poj.org/problem? ...

  9. Codeforces 15 E. Triangles

    http://codeforces.com/problemset/problem/15/E 题意: 从H点走下去,再走回H点,不能走重复路径,且路径不能把黑色三角形包围的方案数 中间的黑色三角形把整张 ...

  10. mysql面试题分组并合并列