简单的BIO通信模型:实现客户端与服务器端通信

BIO,Blocking I/O,同步阻塞I/O模式,数据的读取和写入必须阻塞在一个线程内等待其完成。 模式简单,使用方便。但并发处理能力低,通信耗时,依赖网速。

C/S模型:客户端服务器端模式
·服务器端:Serversocket一个服务器域名,bind绑定端口,listen(三次握手)监听队列,accept返回当前链接的客户
端信息,send/recv交流信息,close(四次挥手)通道关闭
·客户端:socket一个客户端域名,connect(三次握手)建立连接通道,send/recv交流信息,close(四次挥手)关闭通道

看一下简单的例子:
1.服务器端:

public class Server {

    public static void main(String[] args) throws IOException {
        // 结束标识
        String flag = "over";

		// 创建socket对象
        ServerSocket server = new ServerSocket(666);
        System.out.println("服务器端启动");

		// 获取与服务器端相连的客户端ip
        Socket socket = server.accept();
        System.out.println("建立连接");

        PrintWriter os = new PrintWriter(socket.getOutputStream());
        BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));

        System.out.println("客户端:" + is.readLine());
        String line;
        line = sin.readLine();

        while (!line.equals(flag)){
            os.println(line);
            os.flush();
            System.out.println("客户端:" + is.readLine());
            line = sin.readLine();
        }

        os.close();
        is.close();
        socket.close();
        server.close();
        System.out.println("断开连接");
    }
}

2.客户端:

public class Client {
    public static void main(String[] args) throws IOException {
        String flag = "over";
        int port = 123;
        String host = "127.0.0.1";
        Socket socket = new Socket(host, port);
        System.out.println("客户端启动");

        PrintWriter os = new PrintWriter(socket.getOutputStream());
        BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));

        String line = sin.readLine();
        while (!line.equals(flag)){
            os.println(line);
            os.flush();
            System.out.println("服务器:" + is.readLine());
            line = sin.readLine();
        }

        os.close();
        is.close();
        socket.close();
        System.out.println("客户端关闭");
    }
}

你可能感兴趣的:(网络通信,工具)