Java BIO 代码demo

1,597 阅读1分钟

阻塞式IO:服务端启动,等待客户端的连接,在客户端连接到服务端后,服务端启动一个线程去监听客户端消息,客户端发送消息,并等待服务端返回(客户端一直阻塞),服务端收到消息,

将消息返回给客户端,此时一次交互完成。若还需交互,则不释放连接,客户端再次将消息发送给服务端,并等待返回,若不需要交互,则客户端释放连接。

下面是BIO的服务端代码。

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class BIOServer {
  public static void main(String[] args){
    try {
      ServerSocket server = new ServerSocket(5555);
      System.out.println("服务端已启动");
      Socket socket = server.accept();
      System.out.println("获取客户端连接");
      BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
      String lineStr;
      System.out.println("准备接收数据");
      while(!(lineStr = input.readLine()).equals("exit")){
          System.out.println(lineStr);
      }
      socket.close();
      server.close();
      System.out.println("服务端已关闭");
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

下面是阻塞IO的客户端代码。

import java.io.OutputStream;
import java.net.Socket;
import java.nio.charset.Charset;
import java.util.Scanner;

public class BIOClient {
  public static Charset charset = Charset.forName("UTF-8");
  public static void main(String args[]) throws Exception {
    Socket socket = new Socket("localhost", 5555);
    OutputStream outputStream = socket.getOutputStream();
    Scanner scanner = new Scanner(System.in);
    System.out.println("请输入!");
    String msg = scanner.nextLine();
    outputStream.write(msg.getBytes(charset));
    scanner.close();
    socket.close();
  }
}