### Java Socket 用法详解及示例 #### 一、Socket 概述 在 Java 编程语言中,Socket 是一种实现网络通信的基础类库,主要用于建立客户端与服务器之间的连接,进行数据传输。通过 Socket,应用程序可以跨越网络进行双向通信。 #### 二、ServerSocket 的配置与使用 ##### 1. ServerSocket 的基本配置选项 - **SO_TIMEOUT**:表示等待客户端连接的超时时间。 - **SO_REUSEADDR**:表示是否允许重用地址。 - **SO_RCVBUF**:表示接收缓冲区的大小。 这些配置可以通过以下方法设置: - **setSoTimeout(int timeout)**:设置等待客户端连接的超时时间。 - **getSoTimeout()**:获取等待客户端连接的超时时间。 例如,下面的代码展示了如何为一个 ServerSocket 设置超时时间为 6 秒,并捕获可能出现的异常: ```java import java.io.*; import java.net.*; public class TimeoutTester { public static void main(String args[]) throws IOException { ServerSocket serverSocket = new ServerSocket(8000); serverSocket.setSoTimeout(6000); // 设置超时时间为 6 秒 try { Socket socket = serverSocket.accept(); // 等待客户端连接 socket.close(); System.out.println("连接成功"); } catch (SocketTimeoutException e) { System.out.println("连接超时:" + e.getMessage()); } finally { serverSocket.close(); } } } ``` 如果在指定的时间内没有客户端连接,则会抛出 `SocketTimeoutException` 异常。 ##### 2. ServerSocket 的构造方法 - **ServerSocket()**:创建一个默认监听端口的 ServerSocket 对象。 - **ServerSocket(int port)**:创建一个监听指定端口的 ServerSocket 对象。 - **ServerSocket(int port, int backlog)**:创建一个监听指定端口的 ServerSocket 对象,并设置队列长度。 - **ServerSocket(int port, int backlog, InetAddress bindAddr)**:创建一个监听指定端口的 ServerSocket 对象,设置队列长度以及绑定的 IP 地址。 ##### 3. ServerSocket 的主要功能 - **accept()**:阻塞式方法,用于接受客户端的连接请求。 #### 三、Socket 示例 下面的示例展示了如何创建一个 ServerSocket,并处理多个客户端连接请求: ```java import java.net.*; import java.io.*; public class MultiClientServer { public static void main(String args[]) throws Exception { final int length = 100; String host = "localhost"; int port = 8000; ServerSocket serverSocket = new ServerSocket(port); for (int i = 0; i < length; i++) { // 创建新的线程来处理每个客户端的连接 Thread t = new Thread(new ClientHandler(serverSocket.accept())); t.start(); System.out.println("已连接第 " + (i + 1) + " 个客户端"); } } } class ClientHandler implements Runnable { private Socket clientSocket; public ClientHandler(Socket socket) { this.clientSocket = socket; } @Override public void run() { try { // 处理客户端连接 InputStream in = clientSocket.getInputStream(); OutputStream out = clientSocket.getOutputStream(); // 进行数据读写操作... } catch (IOException e) { e.printStackTrace(); } finally { try { clientSocket.close(); } catch (IOException e) { e.printStackTrace(); } } } } ``` 该示例中,ServerSocket 通过 `accept()` 方法等待客户端连接,并为每个客户端创建一个新的线程来处理连接。这样可以确保服务器能够同时处理多个客户端的请求。 ### 总结 通过本文的学习,我们了解了 Java 中 Socket 的基本概念,ServerSocket 的配置与使用方法,以及如何通过示例代码来实现一个简单的多客户端服务器程序。这对于开发基于网络的应用程序非常有用。在实际开发过程中,还需要根据具体需求调整配置参数,并处理各种异常情况,确保网络通信的稳定性和安全性。
- 代码君2020-08-18学习一下,写的比较详细
- 粉丝: 0
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助