TCP是面向连接的,安全可靠的,相比UDP性能低一些。它底层和UDP不一样,UDP使用的是数据包进行传输,包里面写目标地址,TCP是使用IO流做操作。
大家上网的时候在浏览器输入URL,URL请求服务器的资源,服务器根据你的请求做出响应的反应,我们将这种方式称为request(请求)–response(响应)。http协议的底层使用的就是TCP,TCP是http的传输层的协议,这个TCP显然也是请求响-应式的。
既然是请求-响应,那首先要有一台服务器(Server),另一端叫做client(客户端),TCP不像UDP,UDP两端是平等的,它是不平等的。
必须在server上打开一个端口【监听】(这个监听是阻塞式的)客户端的连接,等待客户端的连接,一旦客户端连接了之后,我们就将其称为一个Socket,服务器上就有一个serverSocket。只要建立完了连接之后,底层使用的就是IO流了。
TCP编程的操作步骤(通信原理):
可以使用TCP做很多事情,比如说我们做交互、登录还可以做在线聊天室,还可以手写服务器,这些都会不断涉及,目前先掌握Socket编程的套路,先把套路学会了。
package com.sxt.tcp;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 熟悉流程
* 创建服务器
* 1、指定端口 使用ServerSocket创建服务器
* 2、阻塞式等待连接 accept
* 3、操作: 输入输出流操作
* 4、释放资源
* @author
*
*/
public class Server {
public static void main(String[] args) throws IOException {
System.out.println("-----Server-----");
// 1、指定端口 使用ServerSocket创建服务器
ServerSocket server =new ServerSocket(8888);
// 2、阻塞式等待连接 accept
Socket client =server.accept();
System.out.println("一个客户端建立了连接");
// 3、操作: 输入输出流操作
DataInputStream dis =new DataInputStream(client.getInputStream());
String data =dis.readUTF();
System.out.println(data);
// 4、释放资源
dis.close();
client.close();
server.close();
}
}
package com.sxt.tcp;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* 熟悉流程
* 创建客户端
* 1、建立连接: 使用Socket创建客户端 +服务的地址和端口
* 2、操作: 输入输出流操作
* 3、释放资源
* @author
*
*/
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException {
System.out.println("-----Client-----");
//1、建立连接: 使用Socket创建客户端 +服务的地址和端口
Socket client =new Socket("localhost",8888);
//2、操作: 输入输出流操作
DataOutputStream dos =new DataOutputStream(client.getOutputStream());
String data ="hello";
dos.writeUTF(data);
dos.flush();
//3、释放资源
dos.close();
client.close();
}
}