简单实现一个微信QQ聊天(客户端发送消息,服务端接收,bio)

直接上代码

以下服务端 用来接收消息

public class WechatServer {
    static byte[] bytes = new byte[1024]; 

    public static void main(String[] args) {
        try {
            // 用于监听
            ServerSocket serverSocket = new ServerSocket();
            serverSocket.bind(new InetSocketAddress(8080));
            while (true) {
                System.out.println("wait conn ...");
                // 阻塞  等待连接
                Socket socket = serverSocket.accept();
                System.out.println("conn success");
                System.out.println("wait data...");
                // 阻塞 read 读了多少字节 阻塞拿数据
                int read = socket.getInputStream().read(bytes);
                System.out.println("data success");

                String content = new String(bytes);
                System.out.println(content);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

以下是客户端

在这里可以发送消息

public class Client {
    public static void main(String[] args) {
        try {
            Socket socket = new Socket("127.0.0.1",8080);
            Scanner scanner = new Scanner(System.in);
            String txt = scanner.next();
            socket.getOutputStream().write(txt.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }


    }
}
首先, 启动服务端

在这里插入图片描述
输出wait conn… 等待连接

然后启动客户端

在这里插入图片描述

现在是等待输入状态,将想要发送给服务器的数据输入
在这里插入图片描述

发送结束,客户端停止,现在回去看服务端
在这里插入图片描述
当启动客户端时,服务端输出conn success 连接成功, 然后等待数据 wait data
客户端发送数据, 接收输出 客户端发来的数据
然后继续等待连接

其实,这是bio ,同步阻塞

在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSocket,
然后在客户端启动Socket来对服务端进行通信, 默认情况下服务端需要对每个请求建立一堆线程等待请求,
而客户端发送请求后,先咨询服务端是否有线程相应,如果没有则会一直等待或者遭到拒绝请求,
如果有的话,客户端会线程会等待请求结束后才继续执行。
发布了20 篇原创文章 · 获赞 36 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_41426763/article/details/101199604