Java连接TCP

1. 概述

在Java中,使用TCP协议进行网络通信可以实现可靠的数据传输。本文将向刚入行的小白开发者介绍如何使用Java实现TCP连接,并提供详细的步骤和示例代码。

2. 连接TCP的流程

下表展示了连接TCP的基本流程:

步骤 描述
步骤1 创建ServerSocket对象,指定服务器端口。
步骤2 调用ServerSocket的accept()方法,等待客户端连接。
步骤3 创建Socket对象,指定服务器IP地址和端口。
步骤4 获取Socket的输入输出流,用于向服务器发送和接收数据。
步骤5 发送和接收数据。
步骤6 关闭连接,释放资源。

3. 代码实现

步骤1:创建ServerSocket对象

在服务器端,我们需要创建一个ServerSocket对象,用于监听指定的端口,等待客户端的连接请求。以下是创建ServerSocket对象的代码:

int port = 8000; // 指定服务器端口
ServerSocket serverSocket = new ServerSocket(port); // 创建ServerSocket对象

步骤2:等待客户端连接

服务器端调用ServerSocket的accept()方法,等待客户端的连接请求。以下是等待客户端连接的代码:

Socket clientSocket = serverSocket.accept(); // 等待客户端连接

步骤3:创建Socket对象

在客户端,我们需要创建一个Socket对象,指定服务器的IP地址和端口,用于与服务器建立连接。以下是创建Socket对象的代码:

String serverIp = "127.0.0.1"; // 服务器IP地址
int port = 8000; // 服务器端口
Socket socket = new Socket(serverIp, port); // 创建Socket对象

步骤4:获取输入输出流

Socket对象提供了获取输入输出流的方法,用于向服务器发送数据和接收数据。以下是获取输入输出流的代码:

OutputStream outputStream = socket.getOutputStream(); // 获取输出流,用于向服务器发送数据
InputStream inputStream = socket.getInputStream(); // 获取输入流,用于接收服务器发送的数据

步骤5:发送和接收数据

通过获取到的输入输出流,我们可以进行数据的发送和接收。以下是发送和接收数据的代码:

// 发送数据
String message = "Hello Server";
outputStream.write(message.getBytes());
outputStream.flush();

// 接收数据
byte[] buffer = new byte[1024];
int length = inputStream.read(buffer);
String receivedMessage = new String(buffer, 0, length);

步骤6:关闭连接

在完成数据的发送和接收后,我们需要关闭连接并释放资源。以下是关闭连接的代码:

socket.close(); // 关闭Socket连接
serverSocket.close(); // 关闭ServerSocket连接

4. 示例代码

服务器端代码

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) throws IOException {
        int port = 8000; // 指定服务器端口
        ServerSocket serverSocket = new ServerSocket(port); // 创建ServerSocket对象
        System.out.println("服务器已启动,等待客户端连接...");

        Socket clientSocket = serverSocket.accept(); // 等待客户端连接
        System.out.println("客户端已连接...");

        OutputStream outputStream = clientSocket.getOutputStream(); // 获取输出流,用于向客户端发送数据
        InputStream inputStream = clientSocket.getInputStream(); // 获取输入流,用于接收客户端发送的数据

        // 接收客户端发送的数据
        byte[] buffer = new byte[1024];
        int length = inputStream.read(buffer);
        String receivedMessage = new String(buffer, 0, length);
        System.out.println("接收到客户端发送的数据:" + receivedMessage);

        // 向客户端发送数据
        String message = "Hello Client";
        outputStream.write(message.getBytes());
        outputStream.flush();

        clientSocket.close(); // 关闭Socket连接
        serverSocket.close(); // 关闭ServerSocket连接
    }
}

客户端代码

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream