`
无量
  • 浏览: 1133639 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ServerSocket构造函数中backlog参数的含义,可以接受客户端的数量

阅读更多
1.Server类
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
 * 服务器端
 */
public class Server {
	ServerSocket server = null;
	int serverPort = 9999;
	int backlog = 3;//ServerSocket构造函数中的backlog参数
	
	public Server() throws Exception {
		server = new ServerSocket(serverPort, backlog);
	}
	
	public static void main(String[] args) throws Exception {
		Server server = new Server();
		server.service();
//		Thread.currentThread().sleep(1000*600);//持续600秒
	}
	
	public void service() {
		int count = 1;
		while(true) {
			Socket socket = null;
			try {
				socket = server.accept();
				System.out.println("new connection has connected,num:" + count++);
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				try {
					socket.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

2.Client类
import java.net.Socket;
/**
 * 客户端
 */
public class Client {
	public static void main(String[] args) throws Exception {
		for(int i=0; i<30; i++){
			Socket socket = new Socket("127.0.0.1", 9999);
			System.out.println("client connection:" + (i+1));
		}
	}
}

3.程序输出结果
----当Thread.currentThread().sleep(1000*600);被注释掉时

客户端输出结果:


服务端输出结果:


----当server.service();被注释掉时

客户端输出结果:


4.结果解析
*当server.service()方法被注释后,使得服务器与9999端口绑定后,永远不会执行serverSocket.accept()方法,这意味着ServerSocket队列中的连接请求永远不会被取出。

*当Thread.currentThread().sleep(1000*600);被注释后,使得服务器与9999端口绑定后,就会在一个while循环中不断执行serverSocket.accept()方法,该方法从队列中取出连接请求,使得队列能够及时的腾出空间,以容纳新的连接请求。

*即ServerSocket构造函数中的backlog参数时,是可以serverSocket在不调用accept方法取出连接时,能接受的最大连接数


5.不同ServerSocket构造函数的区别
a.
public ServerSocket(int port, int backlog, InetAddress bindAddr) throws IOException;
构造一个ServerSocket服务端,指定端口是port,可以接受的最大socket客户端连接数backlog(当serverSocket不调用accept方法时),bindAddr是本机中IP中的一个
注:当机器有多个网卡是,会有多个IP,new ServerSocket时,要指定其中一个ip,如果不指定,系统会自动绑定其中一个
b.
public ServerSocket(int port, int backlog) throws IOException;
这个构造函数没有指定绑定提供服务的本机地址,其实质是调用了上面的方法
ServerSocket(port, backlog, null),当地址不提供时,系统会自动在本机多个IP中选一个当做地址,如果本机只有一个网卡即一个Ip,就绑定这个IP,一般绑定127.0.0.1
c.
public ServerSocket(int port) throws IOException;
这个方法相当于调用ServerSocket(port, 50, null),默认队列中支持50个客户端socket连接(当服务端队列中socket连接没有被移除时)


6.一个小程序:判断机器中哪些端口已经被占用
import java.io.IOException;
import java.net.ServerSocket;

public class Test1 {
    public static void main(String[] args) {  
        ServerSocket serverSocket = null;  
        for(int i = 0; i < 65535; i++) {  
            try {  
                serverSocket = new ServerSocket(i);  
                serverSocket.close();  
            } catch (IOException e) {  
                //e.printStackTrace();  
                System.out.println("端口" + i + "已经被其他服务器进程占用");  
            }  
        }  
    }  
}

输出结果:



该程序循环判断1到65535的端口有没有被占用,当被占用时会打印输出被占用的端口号

ServerSocket的几个方法

   *isClosed():判断serverSocket是否已经被关闭,只有执行了ServerSocket的close方法,isClosed()方法才返回true,否则,即使ServerSocket还没有和特定的端口绑定,isClosed方法也会返回false

   *isBound():判断ServerSocket方法是否已经与一个端口绑定,只要ServerSocket已经和一个端口绑定,即使它已经被关闭,isBound()也会返回true

    *如果需要判断一个ServerSocket已经与特定端口绑定,并且还没有被关闭,则可以采用下列方式:

        boolean isOpen = serverSocket.isBound() && !serverSocket.isClosed()
  • 大小: 267.9 KB
  • 大小: 452.6 KB
  • 大小: 288.5 KB
  • 大小: 302.5 KB
分享到:
评论

相关推荐

    欧母龙PLC例程源码陶瓷厂用程序及图纸

    欧母龙PLC例程源码陶瓷厂用程序及图纸提取方式是百度网盘分享地址

    node-v19.6.1-darwin-arm64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    集比赛直播、新闻资讯、数据查询为一体的APP,支持Android和iOS双平台.zip

    NBA Player是由React Native创作的集比赛直播、新闻资讯、数据查询为一体的APP,支持Android和iOS双平台

    那年的毕业设计.zip

    那年的毕业设计

    精品企业智慧中台规划与建设总体方案.rar

    企业智慧中台规划与建设总体方案是一个针对企业数字化转型需求而设计的综合性IT解决方案。该方案旨在构建一个集中、高效和灵活的中台架构,通过整合企业内外部的数据资源、业务流程和应用服务,为企业提供一个统一的数字化运营平台。在当前的商业环境下,企业面临着激烈的市场竞争和不断变化的客户需求。为了应对这些挑战,企业需要快速响应市场变化,提高运营效率,降低成本,并实现持续创新。因此,企业智慧中台的规划和建设成为了关键任务。该方案的核心思想是将企业的业务逻辑、数据管理和技术创新紧密结合起来,形成一个高度集成的智慧中台系统。通过构建标准化的数据模型和接口,实现数据的一致性和可访问性,同时提供丰富的数据分析和挖掘工具,帮助企业发现潜在的商业价值和机会。此外,该方案还注重用户体验和业务敏捷性。通过构建灵活的应用开发框架和API接口,支持快速的业务迭代和定制化需求,满足不同部门和角色的个性化需求。同时,通过智能化的自动化流程和决策支持系统,提高企业的决策效率和准确性。总之,企业智慧中台规划与建设总体方案是一个全面而深入的IT解决方案,旨在帮助企业实现数字化转型,提升竞争力和创新能力。通过构建集中、高效和灵活

    node-v14.2.0-linux-arm64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    欧母龙PLC例程源码自动包装欧姆龙PLC实例程序

    欧母龙PLC例程源码自动包装欧姆龙PLC实例程序提取方式是百度网盘分享地址

    2017年 可穿戴电子设备中无线充电技术的应用专利技术综述.zip

    2017年 可穿戴电子设备中无线充电技术的应用专利技术综述.zip

    机械设计下拉式四柱液压机sw16可编辑非常好的设计图纸100%好用.zip

    机械设计下拉式四柱液压机sw16可编辑非常好的设计图纸100%好用.zip

    python制作九宫格切图器

    请你介绍一下九宫格 九宫格是一种将一个方形划分为九个小方格的布局形式。每个小方格可以容纳一个元素或显示一个图标,用于进行导航、操作或展示内容。 以下是对九宫格的一些基本说明: 布局结构:九宫格布局通常由三行三列的方格组成,其中每个方格都有相同的大小和形状。通过这种均匀的网格结构,可以更有效地组织和展示信息。 导航和操作:九宫格常用于移动应用程序、网站和用户界面设计中,作为导航和操作的元素。每个方格可以代表一个功能、页面或模块,用户可以点击相应的方格来执行相应的操作。 图标排列:在九宫格布局中,每个方格通常包含一个图标,用来表示相应的功能或内容。这些图标可以是文本、图像、按钮或其他可交互的元素。通过合适的图标选择和排列方式,可以使界面更加直观和易于操作。

    中医与人工智能-基于Protégé构建知识图谱

    https://blog.csdn.net/m0_38139250/article/details/121877883 中医与人工智能-基于Protégé构建知识图谱 配套资源

    毕业设计 基于Python+Flask+Vue的知识图谱(Neo4j)的课程学习智能问答系统源码+详细文档+全部数据资料高分项目

    【资源说明】 毕业设计 基于Python+Flask+Vue前后端分离的知识图谱(Neo4j)的课程学习智能问答系统源码+详细文档+全部数据资料(高分项目)毕业设计 基于Python+Flask+Vue前后端分离的知识图谱(Neo4j)的课程学习智能问答系统源码+详细文档+全部数据资料(高分项目)毕业设计 基于Python+Flask+Vue前后端分离的知识图谱(Neo4j)的课程学习智能问答系统源码+详细文档+全部数据资料(高分项目) 【备注】 1、该项目是个人高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过mac/window10/11测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    matlab粒子群优化算法,通过栅格法实现移动机器人路径规划.zip

    【验】粒子群优化算法,通过栅格法实现移动机器人路径规划.zip

    基于java-242_基于微信小程序的快递代取系统设计与实现-源码.zip

    提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

    C语言本科毕业设计-电动车巡航速度控制系统源码.zip

    C语言本科毕业设计-电动车巡航速度控制系统源码。一套以STM32单片机作为主控的电动车巡航速度控制系统,能实现定速巡航、自动避障等

    node-v18.16.0-darwin-arm64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    windows2012升级程序

    云计算专栏里的windows2012升级程序 1.Windows8.1-KB2911106-x64 2.Windows8.1-KB2914218-x64 3.Windows8.1-KB2919442-x64 4.Windows8.1-KB2919355-x64 5.Windows8.1-KB2999226-x64

    51单片机音乐盒设计 程序+原理图+仿真+实物图+PCB图+其他资料

    51单片机音乐盒设计 程序+原理图+仿真+实物图+PCB图+其他资料

    node-v14.15.3-darwin-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v18.15.0-darwin-arm64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

Global site tag (gtag.js) - Google Analytics