也是一个网络传输的协议,发送端和接收端会建立连接——建立io通道,在这个通道的基础上进行数据的发送和响应

特点:

  1. 传输稳定,不容易产生丢包
  2. 效率相对UDP要低

Socket客户端和ServerSocket服务器端:

  1. 建立客户端和服务器端
  2. 建立连接后,通过Socket中的IO流(Socket流)进行数据的传输

如果是服务器端,则需要添加一布操作:通过Socekt服务获取Socket,再获取其中的IO流

  1. 关闭socket

注意点:

  1. 服务器端开启后等待客户端访问,可以不关闭
  2. 一个服务端可以对应多个客户端
  3. 不同客户端间通信可以通过服务器端中转信息。

三次握手

TCP协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠。
第一次握手,客户端向服务器端发出连接请求,等待服务器确认
第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求
第三次握手,客户端再次向服务器端发送确认信息,确认连接,整个交互过程如下图所示
image.png
完成三次握手,连接建立后,客户端和服务器就可以开始进行数据传输了,由于这种面向连接的特性,TCP协议可以保证传输数据的安全,所以应用十分广泛,例如下载文件、浏览网页等

端口号
image.png

TCP通信的概述
image.png

发送端:

  1. package Test23_Demo.Demo04;/*
  2. @create 2020--12--16--14:29
  3. */
  4. import java.io.IOException;
  5. import java.io.OutputStream;
  6. import java.net.Socket;
  7. /**
  8. * 客户端
  9. *
  10. * 1.建立客户端
  11. * 2.连接后,通过socket中的流进行传输
  12. * 3.关闭
  13. */
  14. public class client {
  15. public static void main(String[] args) {
  16. try {
  17. //建立客户端
  18. Socket socket = new Socket("127.0.0.1", 8888);
  19. //建立连接后开始传输
  20. OutputStream outputStream = socket.getOutputStream();
  21. //输出数据
  22. outputStream.write(97);
  23. //关闭
  24. socket.close();
  25. } catch (IOException e) {
  26. e.printStackTrace();
  27. }
  28. }
  29. }

接收端

  1. package Test23_Demo.Demo04;/*
  2. @create 2020--12--16--14:19
  3. */
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.net.ServerSocket;
  7. import java.net.Socket;
  8. public class server {
  9. public static void main(String[] args) {
  10. try {
  11. //建立服务器端
  12. ServerSocket serverSocket = new ServerSocket(8888);
  13. //当前是服务器端,所以获取io流的同时需要等到客户端发送数据过来
  14. Socket socket = serverSocket.accept();
  15. //建立连接之后,通过socket中的io流,进行数据传输
  16. InputStream inputStream = socket.getInputStream();
  17. //读取的是一个字节
  18. int read = inputStream.read();
  19. System.out.println(read);
  20. System.out.println((char) read);
  21. //关闭 - 两个都要关闭
  22. socket.close();
  23. serverSocket.close();
  24. } catch (IOException e) {
  25. }
  26. }
  27. }

shutdownOutput:禁止输出流,告知对方