Java网络编程 TCP通信(Socket 与 ServerSocket)
1.TCP通信原理
TCP通信涉及两个端点:客户端和服务器。服务器端使用 ServerSocket
监听特定端口,等待客户端的连接请求。客户端使用 Socket
连接到服务器的IP地址和端口。一旦连接建立,双方就可以通过输入输出流进行数据交换.
ServerSocket是等待客户端的请求,一旦获得一个连接请求,就创建一个Socket示例来与客户端进行通信。
2.Socket和ServerSocket
ServerSocket
ServerSocket
类用于服务器端,用于监听来自客户端的连接请求。以下是创建 ServerSocket
的基本步骤:
- 创建
ServerSocket
实例并指定端口号。 - 调用
accept()
方法等待客户端连接。 - 接收客户端的
Socket
对象。 - 使用输入输出流与客户端进行通信。
Socket
Socket
类用于客户端,用于连接到服务器并发送/接收数据。以下是使用 Socket
的基本步骤:
- 创建
Socket
实例并指定服务器的IP地址和端口号。 - 连接到服务器。
- 使用输入输出流发送和接收数据。
- 关闭连接。
3.演示
服务器端代码
public class TcpServer {
public static void main(String[] args) {
int port = 12345;
try (ServerSocket serverSocket = new ServerSocket(port)) {
System.out.println("服务器启动,等待客户端连接...");
Socket clientSocket = serverSocket.accept();
System.out.println("客户端已连接");
InputStream input = clientSocket.getInputStream();
OutputStream output = clientSocket.getOutputStream();
// 读取客户端发送的数据
byte[] buffer = new byte[1024];
int bytesRead = input.read(buffer);
System.out.println("来自客户端的消息: " + new String(buffer, 0, bytesRead));
// 向客户端发送响应
output.write("服务器已收到消息".getBytes());
output.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端代码
public class TcpClient {
public static void main(String[] args) {
String host = "127.0.0.1";
int port = 12345;
try (Socket socket = new Socket(host, port)) {
System.out.println("连接到服务器...");
OutputStream output = socket.getOutputStream();
String message = "你好,服务器!";
output.write(message.getBytes());
output.flush();
System.out.println("消息已发送");
} catch (IOException e) {
e.printStackTrace();
}
}
}
TCP通信的基本概念
- 面向连接:TCP通信在数据传输之前需要建立连接,通过三次握手过程。
- 可靠性:TCP通过序列号、确认应答、重传机制等确保数据的可靠传输。
- 流量控制:TCP使用窗口机制来控制发送方的发送速率,防止接收方来不及处理。
- 拥塞控制:TCP通过慢启动、拥塞避免、快速重传和快速恢复等算法来控制网络拥塞。
TCP和UDP的比较
- 连接性:TCP是面向连接的,而UDP是无连接的。
- 速度:TCP由于需要建立连接和保证数据完整性,速度较慢;UDP速度快,但可靠性较低。
- 适用场景:TCP适用于需要可靠传输的场景,如文件传输、邮件传输等;UDP适用于对速度要求高的场景,如实时视频、在线游戏等。
Java中的TCP通信
- ServerSocket:服务器端使用
ServerSocket
来监听客户端的连接请求。 - Socket:客户端使用
Socket
来连接服务器,并进行数据传输。 - 输入输出流:
Socket
提供输入流和输出流来进行数据的读取和发送。 - 多线程:为了同时处理多个客户端,服务器端通常需要使用多线程。
TCP通信的典型应用
- Web服务器:HTTP协议基于TCP,用于客户端和服务器之间的数据传输。
- 数据库连接:数据库客户端通过TCP与服务器进行通信。
- 文件传输:FTP(文件传输协议)使用TCP来保证文件传输的可靠性。
TCP编程的注意事项
- 异常处理:网络编程中需要妥善处理各种网络异常。
- 资源管理:确保及时关闭Socket连接和流,释放系统资源。
- 安全性:考虑使用加密和认证机制来保护数据传输的安全。