基于IO、NIO、Netty的TCP网络聊天程序

该博客详细介绍了如何基于IO、NIO和Netty实现TCP网络聊天程序。首先,阐述了IO的基本概念和在TCP聊天程序中的实现,接着探讨了NIO的单线程模型及与IO的区别。然后,介绍了Netty的特点,以及如何使用Netty构建服务器和客户端。最后,博主总结了三种实现方式,并提供了参考资料。
摘要由CSDN通过智能技术生成

目录

  • 一、IO实现TCP聊天程序
    • 1. IO简介
    • 2. IO实现网络程序
    • 3. 运行测试
  • 二、NIO实现TCP聊天程序
    • 1. NIO简介
    • 2. NIO实现网络程序
    • 3. 运行测试
  • 三、Netty实现TCP聊天程序
    • 1. Netty简介
    • 2. Netty实现网络程序
    • 3. 运行测试
  • 四、总结
  • 五、参考

一、IO实现TCP聊天程序

1. IO简介

  1. 服务端阻塞点
server.accept();获取套接字的时候
inputStream.read(bytes);输入流读取数据的时候

  1. 传统socket是短连接,可以做短连接服务器,他无法做长连接,属于一问一答的模式,比如老的tomcat底层用的就是socket,用完就会关掉线程,因此不会出现线程一直被占用的情况,支持处理多个客户端连接。
    (1)单线程情况下只能有一个客户端(一个线程维护一个连接,也就是一个socket客户连接)线程一直被占用。
    (2)用线程池可以有多个客户端连接,但是非常消耗性能(用此案城池,就是老tomcat原理,只不过是用完后就释放)

2. IO实现网络程序

  • 新建两个java项目(一个Server端,一个client端)
    在这里插入图片描述
  • Server端代码编写
package com.company;

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.io.InputStream;
import java.net.Socket;

public class Main {

    public static void main(String[] args)  throws IOException {
        //创建客户端的Socket对象(SevereSocket)
        //ServerSocket (int port)创建绑定到指定端口的服务器套接字
        ServerSocket ss = new ServerSocket(50000);

        //Socket accept()侦听要连接到此套接字并接受他
        Socket s = ss.accept();

        //获取输入流,读数据,并把数据显示在控制台
        InputStream is = s.getInputStream();
        byte[] bys = new byte[1024];
        int len = is.read(bys);
        String data = new String(bys, 0, len);
        System.out.println("数据是:" + data);

        //释放资源
        s.close();
        ss.close();
    }
}


在这里插入图片描述

  • Client端代码编写
package com.company;

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

public class Main {

    public static void main(String[] args) throws IOException {
        //创建客户端的Socket对象
        //Socket (InetAddress adress,int port)创建流套接字并将其连接到指定IP地址的指定端口号
//		Socket s=new Socket(InetAddress.getByName("192.168.224.1"), 10000);
        //Socket (String host,int port)创建流套接字并将其连接到指定主机的指定端口号
        Socket s=new Socket("127.0.0.1", 50000);

        //获取输出流,写数据
        //OutputStream getOutputStream();返回此套接字的输出流
        OutputStream os=s.getOutputStream();
        os.write("hello,tcp".getBytes());

        //释放资源
        s.close();
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值