分析
- UDP使用数据包进行数据传输,TCP使用IO流实现数据的传输。
- 网络爬虫使用的是Http协议,但Http协议底层是TCP协议。
- TCP协议基于请求-响应模式。通话双方分为服务器和客户端。
TCP通信原理
代码测试
服务器端
import java.io.DataInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 熟悉TCP通信流程
* 服务器端
* 1. 指定端口,使用ServerSocket创建服务器
* 2. 阻塞式等待链接accept();
* 3. 操作:输入输出流操作,对应于接受信息和发送信息
* 4. 释放资源
* @author dxt
*
*/
public class Server {
public static void main(String[] args) throws IOException{
//1. 指定端口,使用ServerSocket创建服务器
ServerSocket server = new ServerSocket(8888);
//2. 阻塞式等待链接accept();
Socket socket = server.accept(); //此socket管理接入的那个客户端
System.out.println("一个客户端建立了链接");
//3. 操作:输入输出流操作,对应于接受信息和发送信息
DataInputStream dis = new DataInputStream(socket.getInputStream()); //接收信息
String data = dis.readUTF();
System.out.println(data);
//4. 释放资源
dis.close();
socket.close();
server.close();
}
}
客户端
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* 客户端
* 1. 建立连接:使用Socket创建客户端 + 服务器IP地址和端口
* 2. 操作:输入输出流操作
* 3. 释放资源
* @author dxt
*
*/
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException{
//1. 建立连接:使用Socket创建客户端 + 服务器IP地址和端口
Socket client = new Socket("localhost", 8888);
//2. 操作:输入输出流操作
DataOutputStream dos = new DataOutputStream(client.getOutputStream()); //向服务器端发送信息,即输出信息
String data = "你好啊";
dos.writeUTF(data);
dos.flush();
//3. 释放资源
dos.close();
client.close();
}
}