ServerSocket01
ServerSocket表示服务端套接字;我们首先来看下其中的一个构造器:
public ServerSocket(int port,int backlog) throws IOException
其中port表示的就是要绑定的端口号;backlog表示服务端所连接的最大长度;客户端要连接服务端,那么所有的客户端会形成一个先进先出的队列,而这个队列的最大长度是由服务端来决定的,backlog就表示这个长度;值得注意的是这个最大长度和操作系统还有关系,如果超过了操作系统限制的最大长度,那么依然是操作系所默认的最大长度。假设我们存在100个客户端,1个服务端,那我们设置请求的最大长度就是3.来看看如下所示的代码,首先创建客户端:
package com.asiaInfo.caozg.zh_02; import java.net.Socket; /**
* @Authgor: gosaint
* @Description:
* @Date Created in 11:26 2018/2/7
* @Modified By:
* 客户端数据
*/
public class Client_02 { public static void main(String[] args) throws Exception{
final int length=100;//设置socket的数量
final String host="localhost";
final int port=8000;
//客户端socket(localhost以及8000端口是连接的服务器)
Socket[] sockets=new Socket[length];
for(int i=0;i<100;i++){
//建立100次的连接
sockets[i]=new Socket(host,port);
System.out.println("第"+(i+1)+"次连接成功");
}
Thread.sleep(3000);
for(int i=0;i<100;i++){
sockets[i].close();
}
}
}
接着我们编码服务端:
package com.asiaInfo.caozg.zh_02; import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket; /**
* @Authgor: gosaint
* @Description:
* @Date Created in 11:37 2018/2/7
* @Modified By:
* 服务端程序
*/
public class Server_02 {
private ServerSocket serverSocket;
private int port=8000; public Server_02() throws IOException{
//在这里服务端设置最大的连接数为3
serverSocket=new ServerSocket(port,3);
System.out.println("服务器启动");
}
public void service() throws IOException {
Socket socket=null;
while(true){
//从连接队列中取出一个连接socket
socket=serverSocket.accept();
System.out.println("1个新的连接对象"+socket.getInetAddress()+":"+socket.getPort());
if(socket!=null){
socket.close(); }
}
} public static void main(String[] args) throws IOException, InterruptedException {
Server_02 server_02=new Server_02();
Thread.sleep(6000*10);//睡眠10分钟
server_02.service();
}
}
我们可以看到服务端启动的时候使用方法accept()从请求队列中取出一个socket,建立连接执行程序;初始化的时候服务端启动,但是因为最大连接数为3,我们还没有调用service()方法,因此队列已经满了,后续的连接不能进行。因此结果如下:
第1次连接成功
第2次连接成功
第3次连接成功
Exception in thread "main" java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
当取消Thread.sleep()之后后续的连接就可以顺利的执行了。
ServerSocket01的更多相关文章
随机推荐
- Kattis - friday 【数学】
题意 每一年的第一天 都是星期天 然后 给出 一年的总天数 和 总月数 以及 每个月 的总天数 求出 有多少个星期五 是当月的13号 思路 对于 每个月 只要判断 当月的13号 是不是 星期五 就可以 ...
- day 5 模块导入、常用模块os shutil sys commands subprocess hashlib json pickle zipfile traceback random datetime
os: os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于shell下cd os. ...
- ruanjiangongcheng1
软体工程的方法有很多方面的意义.包括专案管理,分析,设计,程序的编写,测试和质量控制. 软体设计方法可以区别为重量级的方法和轻量级的方法.重量级的方法中产生大量的正式文档. 著名的重量级开发方法包括I ...
- Network IP Availability Extension
可以查询网络的IP使用情况 neutron net-ip-availability-list neutron net-ip-availability-show GET /v2.0/network-ip ...
- js 判断滚动条的滚动方向
以下代码实现判断页面的滚动条的滚动方向: var sign = 80;//定义默认的向上滚与向下滚的边界 window.onscroll = window.onresize = function(){ ...
- JavaWeb中文件的上传和下载
JavaWeb中文件的上传和下载 转自: JavaWeb学习总结(五十)——文件上传和下载 - 孤傲苍狼 - 博客园https://www.cnblogs.com/xdp-gacl/p/4200090 ...
- 修改Hosts文件,禁止访问指定网页
不知道Hosts文件什么鬼的朋友可以在网上搜索一下(大牛勿喷- -) 访问网址时,先查询本地的Hosts文件,那么如果我们将Hosts文件中的网址与IP的映射修改之后,将访问错误的IP. 如在文件尾追 ...
- Python TCP通信网络编程
最近在看廖雪峰老师的基础教程(http://www.liaoxuefeng.com/),今天实现了一下简单Python的Socket的网络编程. 1. Socket网络编程 Socket是网络编程的一 ...
- linux命令学习笔记(50):crontab命令
前一天学习了 at 命令是针对仅运行一次的任务,循环运行的例行性计划任务,linux系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个 ...
- freeMarker(九)——程序开发指南补充知识
学习笔记,选自freeMarker中文文档,译自 Email: ddekany at users.sourceforge.net 1.变量.范围 本章介绍当模板在访问变量时发生了什么事情,还有变量是如 ...