IO操作的小作业 利用NIO的非阻塞式IO的方式实现多个人连接服务端,且每一个客户端每间隔10s访问一次服务端,如果访问成功
作业:利用NIO的非阻塞式IO的方式实现多个人连接服务端,且每一个客户端每间隔10s访问一次服务端,如果访问成功
package com.rj.bd.zuoye03.zuoye03;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;
import java.util.Scanner;
/**
*
-
@desc 14.利用NIO的非阻塞式IO的方式实现多个人连接服务端,且每一个客户端每间隔10s访问一次服务端
-
@author psh
-
@time 2018-11-7
*/
public class NIONotBlockingClient {
public static void main(String[] args) throws Exception {
//1.获取通道
SocketChannel socketChannel = SocketChannel.open(new InetSocketAddress(“10.2.32.6”,8888));//2.切换成非阻塞模式 socketChannel.configureBlocking(false); //3.开辟指定大小的缓冲区 ByteBuffer byteBuffer = ByteBuffer.allocate(1024); //4.发送数据 //Scanner cin = new Scanner(System.in); while (true) { //System.out.println("客户端01请输入:"); //String inputStr = cin.next(); byteBuffer.put(("10秒老爹我出来一次").getBytes()); byteBuffer.flip(); socketChannel.write(byteBuffer); byteBuffer.clear(); Thread.sleep(10000); }
}
}
package com.rj.bd.zuoye03.zuoye03;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.Iterator;
/**
*
-
@desc 14.利用NIO的非阻塞式IO的方式实现多个人连接服务端,且每一个客户端每间隔10s访问一次服务端
-
@author psh
-
@time 2018-11-7
*/
public class NIONotBlockingServer {
public static void main(String[] args) throws Exception {
//1.获取通道
System.out.println(“服务端启动。。。。。”);
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
//2.切换成非阻塞模式
serverSocketChannel.configureBlocking(false);
//3.绑定连接
serverSocketChannel.bind(new InetSocketAddress(8888));
//4.获取选择器
Selector selector = Selector.open();
//5.将通道注册到选择器上(第二个选项参数叫做选择键,可以用于告诉选择器需要监控这个通道的什么状态或者说做什么事情(读、写、连接、接受))
//选择键是正兴致,如果需要监控钙通道的多个状态或事情,可以将多个选择键用位运算符“或”“|”来连接
//这里服务器首先要监听客户端的接受状态
serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);
//6、轮询式地获取选择器上已经“准备就绪”的事情
while (selector.select()>0)
{
//获取当前选择器中所有注册的“选择键(已就绪的监听事件)”
Iterator iterator = selector.selectedKeys().iterator();while (iterator.hasNext()) { //获取“准备”就绪的是事件 SelectionKey selectionKey = iterator.next(); //判断是什么事件准备就绪 if (selectionKey.isAcceptable()) { //10.若接受就绪,获取客户端连接 SocketChannel socketChanner = serverSocketChannel.accept(); System.out.println(socketChanner.getRemoteAddress()+":连接成功了"); //11.客户端连接socketChannel也需要切换非阻塞模式 socketChanner.configureBlocking(false); //12.将改动到注册到选择器上,监控客户端sockdetChannel的读就绪事件 socketChanner.register(selector, SelectionKey.OP_READ); } else if (selectionKey.isReadable()) { //13.获取当前选择器上“读就绪”状态的通道 SocketChannel socketChanner = (SocketChannel) selectionKey.channel(); //14.设定一个缓冲区 ByteBuffer byteBuffer = ByteBuffer.allocate(1024); //15.取出数据 int len = 0; while ((len=socketChanner.read(byteBuffer))>0) { byteBuffer.flip(); System.out.println(new String(byteBuffer.array(),0,len)); byteBuffer.clear(); } } iterator.remove(); } }
}
}
- python用epoll方式实现客户端对服务端发起大量连接(长连接)
- python用select方式实现io复用对服务端发起大量连接(长连接)
- python用epoll方式实现客户端对服务端发起大量连接(短连接)
- python用select方式实现io复用对服务端发起大量连接(短连接)
- 利用Python实现对linux服务器SSH远程连接和系统操作的几种方式
- smbclient - 类似FTP操作方式的访问SMB/CIFS服务器资源的客户端
- 数据结构:请用一个数组实现两个堆栈,要求最大地利用数组空间,使 数组只要有空间入栈操作就可以成功
- 用oralce连接.net客户端出现问题:“数据连接不成功,请检查该数据库是否已启动尝试加载oracle客户端时引发BadImageFormatException.如果在安装32位Oracle客户端组
- 配置oracle instance client。不需要安装oracle客户端实现程序以及plsql连接oracle服务端
- ASP.NET MVC验证 - 使用哪种方式实现客户端服务端双重异步验证
- Java IO——Socket:通过多线程实现多客户端与一个服务端通信
- JAVA NIO写服务端判断客户端断开连接的方法
- 连接mysql利用jsp实现简单的登陆操作
- 利用Apache服务器实现个人网页的访问
- JAVA NIO写服务端判断客户端断开连接的方法
- Netty实现服务端客户端长连接通讯及心跳检测
- WCF心跳判断服务端及客户端是否掉线并实现重连接
- VMware10中的Linux系统利用NAT网络连接方式访问外网配置
- 关于NIO的疑问,NIO是单线程的,如果后台有比较耗时的操作,别的客户端不就连不进来了?