也是一个网络传输的协议,发送端和接收端会建立连接——建立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:禁止输出流,告知对方