Java IO学习笔记五:BIO到NIO
发布时间:2023-04-17 12:23:03 所属栏目:教程 来源:
导读:准备一个CentOS7的Linux实例, 实例的IP192.168.205.138
我们这次实验的目的就是直观感受一下Socket编程中BIO模型和NIO模型的性能差异
BIO
准备服务端代码:
import java.io.*;
import java.net.InetSocke
我们这次实验的目的就是直观感受一下Socket编程中BIO模型和NIO模型的性能差异
BIO
准备服务端代码:
import java.io.*;
import java.net.InetSocke
|
准备一个CentOS7的Linux实例, 实例的IP192.168.205.138 我们这次实验的目的就是直观感受一下Socket编程中BIO模型和NIO模型的性能差异 BIO 准备服务端代码: import java.io.*; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.socket; /** * BIO Socket Server */ public class SocketServerBIOTest { private static final int PORT = 9090; private static final int BACK_LOG = 2; public static void main(String[] args) { ServerSocket server = null; try { server = new ServerSocket(); server.bind(new InetSocketAddress(PORT), BACK_LOG); System.out.println("server started , port : " + PORT); } catch (IOException e) { e.printstacktrace(); } try { // 接受客户端连接 while (true) { // 先阻塞,这样客户端暂时无法连接进来 // system.in.read(); // 这个方法也是阻塞的,如果没有客户端连接进来,会一直阻塞在这里,除非设置了超时时间 Socket client = server.accept(); System.out.println("client " + client.getPort() + " connected!!!"); // 客户端连接进来后,开辟一个新的线程去接收并处理 new Thread(() -> { try { InputStream inputStream = client.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); char[] data = new char[1024]; while (true) { int num = reader.read(data); if (num > 0) { System.out.println("client read some data is :" + num + " val :" + new String(data, 0, num)); } else if (num == 0) { System.out.println("client read nothing!"); continue; } else { System.out.println("client read -1..."); system.in.read(); client.close(); break; } } } catch (Exception e) { e.printstacktrace(); } }).start(); } } catch (Exception e) { e.printstacktrace(); } finally { try { server.close(); } catch (IOException e) { e.printstacktrace(); } } } } 并且在Linux实例上运行这个代码,然后在自己本地的机器上准备客户端的代码: import java.io.IOException; import java.net.InetSocketAddress; import java.nio.channels.socketChannel; import java.util.LinkedList; public class C10Kclient { public static void main(String[] args) { LinkedList<SocketChannel> clients = new LinkedList<>(); InetSocketAddress serverAddr = new InetSocketAddress("192.168.205.138", 9090); for (int i = 10000,j = 10001; i < 65000; i+=2,j+=2) { try { SocketChannel client1 = SocketChannel.open(); SocketChannel client2 = SocketChannel.open(); client1.bind(new InetSocketAddress("192.168.205.1", i )); client1.connect(serverAddr); clients.add(client1); client2.bind(new InetSocketAddress("192.168.205.1", j)); client2.connect(serverAddr); clients.add(client2); } catch (IOException e) { e.printstacktrace(); } } System.out.println("clients "+ clients.size()); try { system.in.read(); } catch (IOException e) { e.printstacktrace(); } } } 服务端每次用两端口循环多次去和服务端建立连 (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
