一个简单的BIO服务器示例1

2019-01-24  本文已影响0人  周大聪明

任务

编码

public class SimpleSingleThreadBIOServer {
    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();
            System.out.println("服务端已关闭");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

验证

1.启动服务端程序

image.png
2.通过telnet命令连接服务端
在命令行输入telnet localhost 5555
windows下telnet客户端是不开启的,请自行百度开启telnet客户端
image.png
连接成功后,命令行进入黑板界面
image.png
连接成功后,服务端准备接收数据
image.png
给服务端随便发几条消息
image.png
另外开一个命令行,用telnet连接服务端并发送消息,我们发现服务端毫无反应
image.png
给服务端发送exit,发现服务端退出
image.png

总结

那么问题来了,如果要并发,我们需要怎么办?
1.建立连接需要调用server.accept(),所以我们在循环里调用它
2.但是它又是阻塞的,所以我们每拿到个socket,都需要扔到子线程里去处理

上一篇下一篇

猜你喜欢

热点阅读