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的更多相关文章

随机推荐

  1. 小程序连接百度ai

    function getTextFromImage(res) { var access_token = '24.c649256d2e*****0.282335-11449805'; var url = ...

  2. rails member collection

    resources :theses do resources :document do get :download, :on => :member end end <a class=&qu ...

  3. PAT 天梯赛 L2-003. 月饼 【贪心】

    题目链接 https://www.patest.cn/contests/gplt/L2-003 思路 用贪心思路 最后注意一下 总售价有可能是浮点数 AC代码 #include <cstdio& ...

  4. MySQL root 密码重置

    安全模式重置法 基本的思路是,以安全模式启动mysql,这样不需要密码可以直接以root身份登录,然后重设密码. 1. 停止 MySQL 服务 [molo.wu@shark mysql (master ...

  5. java 遍历数组的几种方式

    本文总结自: https://www.cnblogs.com/hellochennan/p/5373186.html 1. 传统方式 非常简单的for循环 int[] a = {1, 2, 3, 4} ...

  6. ML2 Extension Manager

    The extension manager for ML2 was introduced in Juno (more details can be found in the approvedspec) ...

  7. php构造函数的继承方法

    第一种情况:子类没有定义构造函数时,默认继承.例子: ? 1 2 3 4 5 6 7 8 9 10 11 12 <?php class A{  public $name;  function _ ...

  8. 前端框架之VUE

    vue学习[第1篇]:vue之指令 vue学习[第2篇]:es6简单介绍 vue学习[第3篇]:vue之node.js的简单介绍 vue学习[第4篇]:vue 之webpack打包工具的使用 vue学 ...

  9. node.js+express+jade系列三:404错误的配置

    1:新建一个404.jade 2:在app.js后面配置如下代码 app.use(function(req, res){        res.render("404", {sta ...

  10. Django-02

    知识预览 Ajax前戏:json Ajax简介 jquery实现的ajax JS实现的ajax 回到顶部 Ajax前戏:json 什么是json? 定义: JSON(JavaScript Object ...