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,包括InputStreamOutputStreamDataInputStreamDataOutputStream等。

发送数据

发送数据时,我们可以使用输出流的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()