BIO的代码实现,客户端以及服务端 BIO-同步阻塞IO,直接上代码。 服务端import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class SocketServer { public static void main(String[] args) { try { // 绑定端口 ServerSocket socket = new ServerSocket(8082); while (true) { System.out.println("等待客户端连接..."); // 同步阻塞,直到建立连接,意思就是在这里会堵塞,如果没有客户端连接的话, // 代码会停在这里。 Socket client = socket.accept(); // 有客户端连接了,才会往下执行。 // 发送一个消息给客户端 ,这里通过输入输出流来进行交互 OutputStream output = client.getOutputStream(); output.write(("客户端[" + client.getPort() + "]你好,你已成功连接到8082服务端").getBytes()); // 刷新缓冲区 output.flush(); System.out.println("客户端已连接:" + client.getPort()); try { InputStream input = client.getInputStream(); byte[] bytes = new byte[1024]; // 同步阻塞 读取客户端数据 直到输入数据,连接之后,又进行堵塞,读取客户端发送的数据。 while (input.read(bytes) != -1) { output.write(("收到了你的消息:" + new String(bytes)).getBytes()); output.flush(); System.out.println("收到客户端消息:" + new String(bytes).trim()); } } catch (IOException ex) { // 客户端链接断开则引发异常 System.err.println("引发异常:" + ex.getMessage()); } } } catch (IOException e) { e.printStackTrace(); } } } 客户端import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.util.Scanner; public class SocketClient { public static void main(String[] args) { try { // 接收控制台用户输入的数据 Scanner scanner = new Scanner(System.in); // 要绑定的主机和端口号 Socket socketClient = new Socket("127.0.0.1", 8082); // 启动线程监听服务端发送的消息 new Thread(() -> { try { // 获取输入流,读取服务器发送过来的消息 InputStream input = socketClient.getInputStream(); byte[] bytes = new byte[1024 * 4]; while ((input.read(bytes)) != -1) { System.out.println("收到服务端消息:" + new String(bytes).trim()); } } catch (IOException e) { e.printStackTrace(); } }).start(); // 获取输出流,用来向服务器发送消息 OutputStream output = socketClient.getOutputStream(); while (true) { String str = scanner.nextLine(); // 一个小tip if ("exit".equals(str)) { output.close(); socketClient.close(); break; } else { // 向服务端发送消息 output.write(str.getBytes()); output.flush(); } } } catch (IOException e) { e.printStackTrace(); } } } 很简单的一个小栗子,看一看然后自己瞧一瞧,也会更容易理解。代码可以直接运行的。 看山是山,看山不是山,看山还是山。 IDEA小TIPS: 复制完整的代码文本,在IDEA里可以直接粘贴会根据文本直接生成一个类。 封面 网络编程 #网络编程 #BIO BIO的代码实现,客户端以及服务端 https://wangijun.com/2022/08/03/net-02/ 作者 无良芳 发布于 2022年8月3日 许可协议 使用T-IO写的一个简易的聊天室Demo 上一篇 快速删除文件夹 下一篇