Java 套接字编程

概述

Java 套接字编程是一种基于网络的编程技术,它允许开发者创建网络应用程序,实现不同计算机之间的通信。通过使用套接字,我们可以在网络上进行数据传输,建立客户端和服务器之间的通信连接。

Java 提供了许多类和接口,用于套接字编程。最常用的是 SocketServerSocket 类,它们分别用于创建客户端套接字和服务器套接字。

套接字基础

套接字是一种网络通信的端点。在网络中,它由 IP 地址和端口号组成。IP 地址用于标识计算机,而端口号用于标识具体的应用程序。

套接字可以分为两种类型:

  • 客户端套接字:用于向服务器发送请求。
  • 服务器套接字:用于接收客户端的请求并提供服务。

在 Java 中,我们使用 Socket 类来创建客户端套接字,使用 ServerSocket 类来创建服务器套接字。

客户端套接字示例

下面是一个简单的 Java 客户端套接字示例:

import java.io.*;
import java.net.*;

public class Client {
    public static void main(String[] args) {
        try {
            // 创建套接字并连接服务器
            Socket socket = new Socket("localhost", 8080);
            
            // 获取输入流
            InputStream is = socket.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            
            // 获取输出流
            OutputStream os = socket.getOutputStream();
            PrintWriter pw = new PrintWriter(os, true);
            
            // 向服务器发送数据
            pw.println("Hello Server");
            
            // 读取服务器返回的数据
            String response = br.readLine();
            System.out.println("Server response: " + response);
            
            // 关闭套接字和流
            pw.close();
            br.close();
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在上面的示例中,我们首先创建了一个套接字,并使用 localhost 和 8080 端口号连接到服务器。接着,我们获取套接字的输入流和输出流,并使用它们进行数据传输。最后,我们关闭套接字和流。

服务器套接字示例

下面是一个简单的 Java 服务器套接字示例:

import java.io.*;
import java.net.*;

public class Server {
    public static void main(String[] args) {
        try {
            // 创建服务器套接字并监听指定端口
            ServerSocket serverSocket = new ServerSocket(8080);
            
            // 等待客户端连接
            Socket socket = serverSocket.accept();
            
            // 获取输入流
            InputStream is = socket.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            
            // 获取输出流
            OutputStream os = socket.getOutputStream();
            PrintWriter pw = new PrintWriter(os, true);
            
            // 读取客户端发送的数据
            String request = br.readLine();
            System.out.println("Client request: " + request);
            
            // 向客户端发送数据
            pw.println("Hello Client");
            
            // 关闭套接字和流
            pw.close();
            br.close();
            socket.close();
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在上面的示例中,我们首先创建了一个服务器套接字,并使用 8080 端口号进行监听。然后,我们调用 accept() 方法等待客户端连接。一旦客户端连接成功,我们就获取套接字的输入流和输出流,并使用它们进行数据传输。最后,我们关闭套接字和流。

套接字编程的应用

套接字编程在实际应用中具有广泛的应用。下面是一些常见的应用场景:

  • 客户端/服务器应用:套接字编程可用于创建客户端和服务器之间的通信连接,实现各种类型的客户端/服务器应用,如聊天室、远程控制等。
  • 文件传输:套接字编程可用于实现文件传输功能,例如通过套接字将文件从客户端上传到服务器或从服务器下载到客户端。