Java-API简析_java.net.ServerSocket类(基于 Latest JDK)(浅析源码)

这篇具有很好参考价值的文章主要介绍了Java-API简析_java.net.ServerSocket类(基于 Latest JDK)(浅析源码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
https://blog.csdn.net/m0_69908381/article/details/131608966
出自【进步*于辰的博客】

注:
1、IP 类:InetAddress类;
2、套接字 IP 类:InetSocketAddress类;
3、套接字类:Socket类。

1、概述

继承关系:

  • java.lang.Object
    • java.net.ServerSocket

实现的所有接口
Closeable、AutoCloseable
直接已知子类:
SSLServerSocket


public class ServerSocket extends Object

此类实现服务器套接字。服务器套接字等待请求通过网络传入。它基于该请求执行某些操作,然后可能向请求者返回结果。

服务器套接字的实际工作由 SocketImpl 类的实例执行。应用程序可以更改创建套接字实现的套接字工厂来配置它自身,从而创建适合本地防火墙的套接字。

本质:
此类负责服务器套接字的搭建,其本质也是套接字(Socket)。因此,除服务器搭建的相关功能之外,如:获取输入/输出流、绑定套接字 IP,都是通过套接字类 来实现。(见源码)

从以下版本开始:
JDK1.0
另请参见:
SocketImpl、setSocketFactory(java.net.SocketImplFactory)、ServerSocketChannel

2、构造方法摘要

2.1 null

创建非绑定服务器套接字。
说明:
先看源码。
Java-API简析_java.net.ServerSocket类(基于 Latest JDK)(浅析源码),Java-API,Java-API简析,ServerSocket
关于setImpl(),可参考套接字类的第5.2项。

2.2 int port

创建绑定到特定端口的服务器套接字。
说明:
先看源码。
Java-API简析_java.net.ServerSocket类(基于 Latest JDK)(浅析源码),Java-API,Java-API简析,ServerSocket

指定:
连接请求)的最大队列长度为 50
ip地址为 null

底层调用第4项。

2.3 int port, int backlog

利用指定的 backlog 创建服务器套接字并将其绑定到指定的本地端口号。
说明:
先看源码。
Java-API简析_java.net.ServerSocket类(基于 Latest JDK)(浅析源码),Java-API,Java-API简析,ServerSocket

指定:
ip地址为 null

底层调用下1项。

2.4 int port, int backlog, InetAddress bindAddr

使用指定的端口、侦听 backlog 和要绑定到的本地 IP 地址创建服务器。
说明:
先看源码。
Java-API简析_java.net.ServerSocket类(基于 Latest JDK)(浅析源码),Java-API,Java-API简析,ServerSocket
关于setImpl(),可参考套接字类的第5.2项;关于bind(),见第3.3项。

示例:

InetAddress ip = InetAddress.getByName("localhost");
ServerSocket server = new ServerSocket(8080, 1, ip);
sout "等待";
Socket client = server.accept();
sout "已连接";

业务:通过本地 ip,建立在端口8080上,构建Socket服务器,可接收1个连接请求。

3、方法摘要

3.1 Socket accept()

侦听并接受到此套接字的连接。

3.2 void bind(SocketAddress endpoint)

将 ServerSocket 绑定到特定地址(IP 地址和端口号)。
说明:
先看源码。
Java-API简析_java.net.ServerSocket类(基于 Latest JDK)(浅析源码),Java-API,Java-API简析,ServerSocket

指定:
连接请求)的最大队列长度为 50

底层调用下1项。

3.3 void bind(SocketAddress endpoint, int backlog)

将 ServerSocket 绑定到特定地址(IP 地址和端口号)。
说明:
先看源码。
Java-API简析_java.net.ServerSocket类(基于 Latest JDK)(浅析源码),Java-API,Java-API简析,ServerSocket
关于isClosed(),见第14项。

!oldImpl && isBound()为 true 说明:

  1. bound = true,表示“已绑定”;
  2. oldImpl = false,表示当前套接字实现类是“新的”(即“可用”)。(可进一步证明在套接字类的第5.1项中我对字段oldImpl作用的判断和总结)

endpoint instanceof InetSocketAddress表示仅支持“套接字 IP”。

关于isUnresolved()/getAddress()/getPort(),见套接字 IP 类的第3.7、3.3、3.5项;关于checkListen(),见SecurityManager类的第4.12项;关于getImpl(),可参考套接字类的第5.6项;关于bind(),见套接字类的第3.1项。

进入listen()。(出自实现类 AbstractPlainSocketImpl)
Java-API简析_java.net.ServerSocket类(基于 Latest JDK)(浅析源码),Java-API,Java-API简析,ServerSocket
进入socketListen()。(出自实现类 PlainSocketImpl)
Java-API简析_java.net.ServerSocket类(基于 Latest JDK)(浅析源码),Java-API,Java-API简析,ServerSocket
关于socketListen(),暂不知底层调用了哪里。

3.4 void close()

关闭此套接字。

3.5 ServerSocketChannel getChannel()

返回与此套接字关联的惟一 ServerSocketChannel 对象(如果有)。

3.6 InetAddress getInetAddress()

返回此服务器套接字的本地地址。

3.7 int getLocalPort()

返回此套接字在其上侦听的端口。

3.8 SocketAddress getLocalSocketAddress()

返回此套接字绑定的端点的地址,如果尚未绑定则返回 null。

3.9 int getReceiveBufferSize()

获取此 ServerSocket 的 SO_RCVBUF 选项的值,该值是将用于从此 ServerSocket 接受的套接字的建议缓冲区大小。

3.10 int getReuseAddress()

测试是否启用 SO_REUSEADDR

3.11 int getSoTimeout()

重新恢复 SO_TIMEOUT 的设置。

3.12 protected int implAccept(Socket s)

ServerSocket 的子类使用此方法重写 accept() 以返回它们自己的套接字子类。

3.13 boolean isBound()

返回 ServerSocket 的绑定状态。

3.14 boolean isClosed()

返回 ServerSocket 的关闭状态。

3.15 void setPerformancePreferences(int connectionTime, int latency, int bandwidth)

设置此 ServerSocket 的性能偏好 (performance preferences)。

3.16 void setReceiveBufferSize(int size)

为从此 ServerSocket 接受的套接字的 SO_RCVBUF 选项设置默认建议值。

3.17 void setReuseAddress(boolean on)

启用/禁用 SO_REUSEADDR 套接字选项。

3.18 static void setSocketFactory(SocketImplFactory fac)

为应用程序设置服务器套接字实现工厂。

3.19 void setSoTimeout(int timeout)

启用/禁用带有指定超时值的 SO_TIMEOUT,以毫秒为单位。

3.20 String toString()

作为 String 返回此套接字的实现地址和实现端口。

最后

如果大家需要Java-API文档,我上传了《Java-API文档-包含5/8/11三个版本》。


本文暂缓更新。文章来源地址https://www.toymoban.com/news/detail-545140.html

到了这里,关于Java-API简析_java.net.ServerSocket类(基于 Latest JDK)(浅析源码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java-API简析_java.io.BufferedWriter类(基于 Latest JDK)(浅析源码)

    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/131742088 出自【进步*于辰的博客】 继承关系: java.lang.Object java.io.Writer java.io.BufferedWriter 所有已实现的接口: Closeable、Flushable、Appendable public class BufferedWriter ext

    2024年02月16日
    浏览(30)
  • ES8 向量搜索(knn-search)java-api 实践

    官方文档-knn-search kNN搜索 k-nearest neighbor (kNN)搜索找到与查询向量最近的k个向量,如通过相似度计算。 kNN的常见用例包括: 基于自然语言处理(NLP)算法的相关性排序 产品推荐和推荐引擎 图像或视频的相似性搜索 要运行kNN搜索,您必须能够将数据转换为有意义的向量值

    2024年02月12日
    浏览(44)
  • Hadoop系统应用之HDFS相关操作 - - Java-API对HDFS的操作(IDEA版)

    通过Java API来操作HDFS文件系统HDFS,相关的操作有:文件上传、文件下载、新建文件夹、查看文件、删除文件。 1.Linux下安装好hadoop,这里使用hadoop2.7.3 2.window解压hadoop2.7.3的包 2.Windows下安装好jdk1.8  3.Windows下安装好IDEA,这里使用IDEA2022 4.Windows下安装好maven,这里使用Maven3.6.3

    2024年02月05日
    浏览(50)
  • Java Socket和ServerSocket 使用

    在Java中,Socket和ServerSocket是用于创建网络连接的重要类。Socket类用于创建客户端套接字,而ServerSocket类用于创建服务器套接字。在本文中,我们将讨论Socket和ServerSocket的作用、使用方法以及相关代码示例。 Socket是Java中用于创建客户端套接字的类。它提供了一种机制,可以让

    2024年02月03日
    浏览(27)
  • Java 网络编程 —— ServerSocket 详解

    ServerSocket 的构造方法有以下几种重载形式 参数 port 指定服务器要绑定的端口(即服务器要监听的端口),参数 backlog 指定客户连接请求队列的长度,参数 bindAddr 指定服务器要绑定的 IP 地址 1. 绑定端口 除了第 1 个不带参数的构造方法,其他构造方法都会使服务器与特定端口

    2024年02月02日
    浏览(36)
  • 【Java练习题汇总】《第一行代码JAVA》网络编程篇&集合体系篇&JDBC篇,汇总Java练习题——Socket 与ServerSocket、List和Set、Map~

    一、填空题 在类集中存放单值的最大父接口是___________ ,存放一对值的最大父接口是___________ 。 ___________ 接口保存的数据是不允许重复的,并且___________ 子类是可以排序的,根据___________ 排序。 Java 类集可以使用的输出方式是___________ 、___________ 、___________ 和___________ 。 在

    2024年02月13日
    浏览(45)
  • com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: con

    com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: connect 在SpringCloud项目启动注册中心Eureka时报这个错 先粗略的看下报错信息,意思是:注册中心注册不到服务,那这里可能就是application.xml文件有错误,注册中心默认的register-with-eureka: true,但是这里我

    2024年02月16日
    浏览(46)
  • 【Java基础教程】(四十七)网络编程篇:网络通讯概念,TCP、UDP协议,Socket与ServerSocket类使用实践与应用场景~

    了解多线程与网络编程的操作关系; 了解网络程序开发的主要模式; 了解 TCP 程序的基本实现; 在Java中,网络编程的核心意义是实现不同电脑主机之间的数据交互。Java采用了一种简化的概念,将这个过程进一步抽象为JVM(Java虚拟机)进程之间的通信。可以在同一台电脑上

    2024年02月15日
    浏览(63)
  • 关于Java中单例模式(饿汉模式和懒汉模式)的简析

    目录 一.什么是单例模式 二.饿汉模式和懒汉模式 饿汉模式 代码 懒汉模式 代码 关于多线程安全的问题 如何解决懒汉模式多线程安全问题 双if判断 简单来说,就是我们在程序中通过代码进行限制,在该程序中 只能创建一个对象 因为只能创建一个对象,所以对于我们而言就有两种

    2024年02月10日
    浏览(78)
  • 基于hadoop的HBase JAVA API

    摘要:   HBase的Java API提供了一种与HBase数据库进行交互的方式,通过编写Java程序可以连接到HBase集群并对数据进行存储、检索和处理。该API适用于大规模数据存储、实时数据访问和高扩展性需求的场景。具有高可靠性、高扩展性和高性能的特点。它可以处理海量数据,并且支

    2024年02月03日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包