TCP协议

TCP协议是一种面向连接的通信协议,确保数据的可靠传输。连接建立通过三次握手完成,而断开连接则涉及四次挥手。在Java中,TCP通信通过Socket类和ServerSocket类实现,它们提供了相应的构造器和方法进行连接管理和数据传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TCP协议:
传输控制协议 (Transmission Control Protocol)
TCP协议是面向连接的通信协议,即传输数据之前,在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。在TCP连接中必须要明确客户端与服务器端,由客户端向服务端发出连接请求,每次连接的创建都需要经过“三次握手”

三次握手:TCP协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠

  • 第一次握手,客户端向服务器端发出连接请求,等待服务器确认
  • 第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求
  • 第三次握手,客户端再次向服务器端发送确认信息,确认连接
    在这里插入图片描述
    准备要断开连接的四次挥手
    在这里插入图片描述

Java为客户端提供了Socket类,为服务端提供了ServerSocket类

Socket类的构造器方法
方法名说明
Socket(InetAddreess address,int port)创建流套接字并将其连接指定IP,指定端口号
Socket(String host,int post)创建流套接字并将其连接到指定主机上的指定端口号
相关方法
方法名说明
InoutStream getInputStream()返回此套接字的输入流
OutPutStream getOutputStream()返回此套接字的输出流
ServerSocket类的构造器方法
f方法名说明
ServerSocket(int port)创建服务器的套接字绑定到指定的端口
相关方法
方法名说明
Socket accpet()监听要连接到的套接字并接受它
accpet方法是堵塞的,作用就是等待客户端的连接
read方法也是阻塞的
测试

客户端

 public static void main(String[] args) throws IOException {
        /**
         * 1.创建客户端的Socket对象,绑定到指定的IP和端口号
         * 2.获取输出流,写数据发送过去
         */
        Socket socket = new Socket (InetAddress.getByName ("192.168.1.52"),4399);
        OutputStream os = socket.getOutputStream ();
        os.write ("天皇盖地虎".getBytes ());
        socket.shutdownOutput ();

        InputStream ss = socket.getInputStream ();
        byte[] arr = new byte[1024];
        int len ;
        while ((len=ss.read (arr))!=-1){
            String msg = new String (arr, 0, len);
            System.out.println (msg);
        }

        ss.close ();
        os.close ();
        socket.close ();
    }

服务端

  public static void main(String[] args) throws IOException {
        /**
         * 1.创建服务器的ServerSocket对象,绑定指定的端口号
         * 2.ServerSocket对象调用accpet堵塞方法,也就是只有一个客户端连接
         * 3获取输入流,读数据
         */

        ServerSocket serverSocket = new ServerSocket (4399);
        Socket accept = serverSocket.accept ();
        InputStream is = accept.getInputStream ();

       /* int len ;
        while ((len=is.read ())!=-1){
            System.out.println ((char) len);
        }*/
        byte[] arr = new byte[1024];
        int len ;
        while ((len=is.read (arr))!=-1){
            String msg = new String (arr, 0, len);
            System.out.println (msg);
        }

        //回复信息给客户端
        OutputStream ss = accept.getOutputStream ();
        ss.write ("宝塔镇河妖".getBytes ());

        //关闭资源
        ss.close ();
        is.close ();
        serverSocket.close ();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值