目录

2024-04-06-TCP通信协议及代码细节

TCP通信协议及代码细节

TCP通信协议

TCP通信协议是一种可靠的网络协议

它在通信的两端各建立一个Socket对象

通信之前要保持连接已经建立

通过Socket产生IO流来进行网络通信

https://i-blog.csdnimg.cn/blog_migrate/bf7a4b92e9226f2fa882455553575c2d.png

代码实现

先运行服务端 再运行客户端

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

public class Server {
    public static void main(String[] args) throws IOException {
        //TCP协议 接收数据

        //1.创建对象ServerSocker
        ServerSocket ss=new ServerSocket(10000);

        //2.监听客户端的连接
        Socket socket=ss.accept();

        //3.从连接通道中获取输入流读取数据
        InputStream is=socket.getInputStream();
        int b;
        while((b=is.read())!=-1) System.out.print((char) b);

        //4.释放资源
        //断开与客户端的连接
        socket.close();
        //关闭服务器
        ss.close();
    }
}
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;

public class Client {
    public static void main(String[] args) throws IOException {
        //TCP协议 发送数据

        //1.创建Socket对象
        //细节 在创建对象的同时会连接服务端
        //如果连接不上 代码会报错
        Socket socket=new Socket("127.0.0.1",10000);

        //2.可以从连接通道中获取输出流
        OutputStream os=socket.getOutputStream();
        //写出数据
        os.write("Dduo".getBytes());

        //3.释放资源
        os.close();
        socket.close();
    }
}

但是这种只能接收英文

接受中文会产生乱码

原因是IDE默认编码规则是UTF-8

所以每次转中文只是三分之一个中文

所以我们会接受到乱码

我的得把字节流变成字符流

运用转换流

https://i-blog.csdnimg.cn/blog_migrate/70d908b98a2b1cd21a10c01939782d07.png

运用缓冲流 提高效率

https://i-blog.csdnimg.cn/blog_migrate/b31f31cec35a0ca4857359016558b853.png

简写代码

一个套一个

https://i-blog.csdnimg.cn/blog_migrate/b2c86d0b475f241efab64c815fb99adf.png

TCP协议代码细节

https://i-blog.csdnimg.cn/blog_migrate/e3d37c647e408ebada0b47bd7cc4122d.png

accept方法底层会等客户端来连接

客户端底层会用三次握手协议来确保连接建立

读写都是IO流去实现的

这些流不是我们去创建的 而是在连接通道里面的

流可以关闭也可以不关闭

但是断开连接时还有四次挥手协议

利用这个协议断开连接

而且就可以保证连接通道里的数据已经处理完毕了

三次握手与四次挥手

三次握手是一个反复确认的过程

https://i-blog.csdnimg.cn/blog_migrate/b0b850530a362a8c9a489bbf5e76f40a.png

四次挥手是为了确保连接断开且数据处理完毕

https://i-blog.csdnimg.cn/blog_migrate/a8be9b4e5c3c6d84ca5fb0923375274f.png

68747470733a2f2f62:6c6f672e6373646e2e6e65742f71715f33303530303537352f:61727469636c652f64657461696c732f313337343130303536