也是一个网络传输的协议,发送端和接收端会建立连接——建立io通道,在这个通道的基础上进行数据的发送和响应
特点:
- 传输稳定,不容易产生丢包
- 效率相对UDP要低
Socket客户端和ServerSocket服务器端:
- 建立客户端和服务器端
- 建立连接后,通过Socket中的IO流(Socket流)进行数据的传输
如果是服务器端,则需要添加一布操作:通过Socekt服务获取Socket,再获取其中的IO流
- 关闭socket
注意点:
- 服务器端开启后等待客户端访问,可以不关闭
- 一个服务端可以对应多个客户端
- 不同客户端间通信可以通过服务器端中转信息。
三次握手
TCP协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠。
第一次握手,客户端向服务器端发出连接请求,等待服务器确认
第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求
第三次握手,客户端再次向服务器端发送确认信息,确认连接,整个交互过程如下图所示

完成三次握手,连接建立后,客户端和服务器就可以开始进行数据传输了,由于这种面向连接的特性,TCP协议可以保证传输数据的安全,所以应用十分广泛,例如下载文件、浏览网页等
端口号
TCP通信的概述
发送端:
package Test23_Demo.Demo04;/*@create 2020--12--16--14:29*/import java.io.IOException;import java.io.OutputStream;import java.net.Socket;/*** 客户端** 1.建立客户端* 2.连接后,通过socket中的流进行传输* 3.关闭*/public class client {public static void main(String[] args) {try {//建立客户端Socket socket = new Socket("127.0.0.1", 8888);//建立连接后开始传输OutputStream outputStream = socket.getOutputStream();//输出数据outputStream.write(97);//关闭socket.close();} catch (IOException e) {e.printStackTrace();}}}
接收端
package Test23_Demo.Demo04;/*@create 2020--12--16--14:19*/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) {try {//建立服务器端ServerSocket serverSocket = new ServerSocket(8888);//当前是服务器端,所以获取io流的同时需要等到客户端发送数据过来Socket socket = serverSocket.accept();//建立连接之后,通过socket中的io流,进行数据传输InputStream inputStream = socket.getInputStream();//读取的是一个字节int read = inputStream.read();System.out.println(read);System.out.println((char) read);//关闭 - 两个都要关闭socket.close();serverSocket.close();} catch (IOException e) {}}}
shutdownOutput:禁止输出流,告知对方
