Java中的ServerSocket简述及作用
在Java里,ServerSocket
是java.net
包中的一个类,它的主要作用是在服务器端创建一个监听特定端口的套接字,等待客户端的连接请求。当有客户端尝试连接到服务器所监听的端口时,ServerSocket
会接受这个连接请求,并返回一个Socket
对象,通过这个Socket
对象服务器就能够和客户端进行数据的交互。
使用ServerSocket创建简单服务器的步骤
1. 创建ServerSocket
对象
要创建一个ServerSocket
对象,需要指定服务器监听的端口号。端口号的范围是 0 - 65535,不过 0 - 1023 通常是系统保留端口,所以一般选择 1024 以上的端口。
2. 等待客户端连接
调用ServerSocket
的accept()
方法,该方法会阻塞程序,直到有客户端连接进来。一旦有客户端连接,accept()
方法会返回一个Socket
对象,这个对象代表了与客户端的连接。
3. 获取输入输出流
从返回的Socket
对象中获取输入流和输出流,通过输入流可以接收客户端发送的数据,通过输出流可以向客户端发送数据。
4. 进行数据交互
使用输入输出流进行数据的读写操作,实现与客户端的通信。
5. 关闭连接
通信结束后,关闭Socket
和ServerSocket
,释放系统资源。
示例代码
以下是使用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
语句,确保Socket
和ServerSocket
在使用完毕后自动关闭。
通过以上步骤和代码,你就可以使用ServerSocket
创建一个简单的服务器。