Java TCP通信
简介
在计算机网络中,TCP(传输控制协议)是一种可靠的、面向连接的协议,用于在网络中传输数据。TCP提供了一种可靠的、有序的、基于字节流的传输方式。Java语言提供了一套TCP通信的API,使得我们可以轻松地使用TCP协议进行网络通信。
本文将介绍如何使用Java TCP通信,包括建立连接、发送和接收数据,以及一些常见的应用场景。
建立连接
在进行TCP通信之前,我们需要首先建立一个连接。Java提供了Socket
类和ServerSocket
类来实现TCP连接的建立。
客户端连接
在客户端,我们需要创建一个Socket
对象来连接到服务器。下面是一个简单的客户端代码示例:
import java.io.*;
import java.net.*;
public class TCPClient {
public static void main(String[] args) {
try {
// 创建Socket对象
Socket socket = new Socket("127.0.0.1", 8888);
// 获取输入输出流
OutputStream out = socket.getOutputStream();
InputStream in = socket.getInputStream();
// 发送数据
String message = "Hello, server!";
out.write(message.getBytes());
// 接收数据
byte[] buffer = new byte[1024];
int length = in.read(buffer);
String response = new String(buffer, 0, length);
System.out.println("Server response: " + response);
// 关闭连接
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
在上述代码中,我们首先创建一个Socket
对象,指定服务器的IP地址和端口号。然后,我们获取输入输出流,使用输出流发送数据给服务器,并通过输入流接收服务器的响应。最后,我们关闭连接。
服务端监听
在服务器端,我们需要创建一个ServerSocket
对象来监听客户端连接。下面是一个简单的服务器端代码示例:
import java.io.*;
import java.net.*;
public class TCPServer {
public static void main(String[] args) {
try {
// 创建ServerSocket对象
ServerSocket serverSocket = new ServerSocket(8888);
while (true) {
// 监听客户端连接
Socket socket = serverSocket.accept();
System.out.println("Client connected: " + socket.getInetAddress());
// 获取输入输出流
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();
// 接收数据
byte[] buffer = new byte[1024];
int length = in.read(buffer);
String message = new String(buffer, 0, length);
System.out.println("Client message: " + message);
// 发送数据
String response = "Hello, client!";
out.write(response.getBytes());
// 关闭连接
socket.close();
System.out.println("Client disconnected: " + socket.getInetAddress());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
在上述代码中,我们首先创建一个ServerSocket
对象,并指定监听的端口号。然后,我们使用accept()
方法来监听客户端连接,当有客户端连接时,我们创建一个新的Socket
对象来处理连接。然后,我们获取输入输出流,接收客户端发送的数据,并发送响应给客户端。最后,我们关闭连接。
发送和接收数据
在使用TCP通信时,我们可以使用输入输出流来发送和接收数据。Java提供了一套完整的输入输出流API,包括InputStream
、OutputStream
、DataInputStream
和DataOutputStream
等。
发送数据
发送数据时,我们可以使用输出流的write()
方法来发送字节数组或字符串。
OutputStream out = socket.getOutputStream();
String message = "Hello, server!";
out.write(message.getBytes());
上述代码示例中,我们首先获取输出流对象,然后使用write()
方法发送字符串"Hello, server!"
的字节数组。
接收数据
接收数据时,我们可以使用输入流的read()
方法来接收字节数组,并将其转换为字符串。
InputStream in = socket.getInputStream();
byte[] buffer = new byte[1024];
int length = in.read(buffer);
String response = new String(buffer, 0, length);
System.out.println("Server response: " + response);
上述代码示例中,我们首先获取输入流对象,然后使用read()