Java中的ServerSocket简述及作用

在Java里,ServerSocketjava.net包中的一个类,它的主要作用是在服务器端创建一个监听特定端口的套接字,等待客户端的连接请求。当有客户端尝试连接到服务器所监听的端口时,ServerSocket会接受这个连接请求,并返回一个Socket对象,通过这个Socket对象服务器就能够和客户端进行数据的交互。

使用ServerSocket创建简单服务器的步骤

1. 创建ServerSocket对象

要创建一个ServerSocket对象,需要指定服务器监听的端口号。端口号的范围是 0 - 65535,不过 0 - 1023 通常是系统保留端口,所以一般选择 1024 以上的端口。

2. 等待客户端连接

调用ServerSocketaccept()方法,该方法会阻塞程序,直到有客户端连接进来。一旦有客户端连接,accept()方法会返回一个Socket对象,这个对象代表了与客户端的连接。

3. 获取输入输出流

从返回的Socket对象中获取输入流和输出流,通过输入流可以接收客户端发送的数据,通过输出流可以向客户端发送数据。

4. 进行数据交互

使用输入输出流进行数据的读写操作,实现与客户端的通信。

5. 关闭连接

通信结束后,关闭SocketServerSocket,释放系统资源。

示例代码

以下是使用ServerSocket创建简单服务器的示例代码:

SimpleServer.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class SimpleServer {
    public static void main(String[] args) {
        try (ServerSocket serverSocket = new ServerSocket(8888)) {
            System.out.println("服务器已启动,监听端口 8888...");
            while (true) {
                try (Socket socket = serverSocket.accept();
                     BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                     PrintWriter out = new PrintWriter(socket.getOutputStream(), true)) {
                    System.out.println("客户端已连接:" + socket.getInetAddress());
                    String inputLine;
                    while ((inputLine = in.readLine()) != null) {
                        System.out.println("客户端消息:" + inputLine);
                        out.println("服务器已收到消息:" + inputLine);
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}    

代码解释

  • 创建ServerSocket对象ServerSocket serverSocket = new ServerSocket(8888)创建了一个ServerSocket对象,监听 8888 端口。
  • 等待客户端连接Socket socket = serverSocket.accept()会阻塞程序,直到有客户端连接进来,连接成功后返回一个Socket对象。
  • 获取输入输出流BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))用于接收客户端发送的数据;PrintWriter out = new PrintWriter(socket.getOutputStream(), true)用于向客户端发送数据。
  • 进行数据交互:通过while ((inputLine = in.readLine()) != null)循环读取客户端发送的数据,并将响应信息发送给客户端。
  • 关闭连接:使用try-with-resources语句,确保SocketServerSocket在使用完毕后自动关闭。

通过以上步骤和代码,你就可以使用ServerSocket创建一个简单的服务器。