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的更多相关文章
随机推荐
- 小程序坑 redirectTo 计时器 setInterval clearInterval
var time = 20: var timer = setInterval(function () { time = time - 1; that.setData({ CountDown: time ...
- putty screen
http://www.cnblogs.com/xupeizhi/archive/2013/05/20/3088779.html screen 会创建一个跑着shell的单一窗口 Ctrl+a d退出刚 ...
- socket通信——通过Udp传输方式,将一段文字数据发送出去
需求:通过Udp传输方式,将一段文字数据发送出去 定义一个Udp发送端 思路: 1.建立updsocket服务 2.提供数据,并将数据封装到数据包中. 3.通过socket服务的发送功能,将数据包发出 ...
- 回忆基础:制作plist文件
-(void)creatPlistFileWithArr:(NSArray *)array{ //将字典保存到document文件->获取appdocument路径 NSString *docP ...
- 【leetcode刷题笔记】Best Time to Buy and Sell Stock II
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
- 国内ADSL用户的带宽一般都是1M、2M、3M的,理论上的下载速度分别是128K/S、256K/S、384K/S。
国内ADSL用户的带宽一般都是1M.2M.3M的,理论上的下载速度分别是128K/S.256K/S.384K/S. 1024/8===128 2048/8==256
- <linux报错解决>在Fedora21下安装vmware报错的解决办法
关于VMWARE WORKSTATION在Fedora21下的安装问题 (1)在Fedora21下安装vmware如果在终端下启动,提示你找不到内核头文件Kernel Headers的话使用命令: s ...
- POJ 1068 Parencodings (类似括号的处理问题)
Pare ...
- HTML URL 编码:请参阅:http://www.w3school.com.cn/tags/html_ref_urlencode.html
http://www.w3school.com.cn/tags/html_ref_urlencode.html
- codevs1281 Xn数列
题目描述 Description 给你6个数,m, a, c, x0, n, g Xn+1 = ( aXn + c ) mod m,求Xn m, a, c, x0, n, g<=10^18 输入 ...