IO、NIO、Netty分别实现服务端与客户端通信

简化下场景:客户端每隔两秒发送一个带有时间戳的 “hello world” 给服务端,服务端收到之后打印。

IO编程

IO服务端:
public class IOServer {
   
    public static void main(String[] args) throws Exception {
   

        ServerSocket serverSocket = new ServerSocket(8000);

        // (1) 接收新连接线程
        new Thread(() -> {
   
            while (true) {
   
                try {
   
                    // (1) 阻塞方法获取新的连接
                    Socket socket = serverSocket.accept();

                    // (2) 每一个新的连接都创建一个线程,负责读取数据
                    new Thread(() -> {
   
                        try {
   
                            int len;
                            byte[] data = new byte[1024];
                            InputStream inputStream = socket.getInputStream();
                            // (3) 按字节流方式读取数据
                            while ((len = inputStream.read(data)) != -1) {
   
                                System.out.println(new String(data, 0, len));
                            }
                        } catch (IOException e) {
   
                        }
                    }).start();

                } catch (IOException e) {
   
                }

            }
        }).start();
    }
}
  • Server 端首先创建了一个serverSocket来监听 8000 端口,然后创建一个线程,线程里面不断调用阻塞方法 serversocket.accept();获取新的连接;
  • 当获取到新的连接之后,给每条连接创建一个新的线程,这个线程负责从该连接中读取数据;
  • 然后读取数据是以字节流的方式。
IO客户端:
public class IOClient {
   

    public static void main(String[] args) {
   
        new Thread(() -> {
   
            try {
   
                Socket socket = new Socket("127.0.0.1", 8000);
                while (true) {
   
                    try {
   
                        socket.getOutputStream().write((new Date() + ": hello world").getBytes())
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值