服务端java代码
时间: 2023-07-02 18:17:37 浏览: 75
以下是一个简单的Java Socket服务端代码示例,其中包含了设置SO_KEEPALIVE选项的部分:
```java
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
public class SocketServer {
public static void main(String[] args) {
try {
// 创建ServerSocket对象并绑定端口
ServerSocket serverSocket = new ServerSocket(8888);
// 设置SO_KEEPALIVE选项
serverSocket.setKeepAlive(true);
serverSocket.setSoTimeout(60000); // 设置超时时间为1分钟
serverSocket.setReuseAddress(true); // 设置SO_REUSEADDR选项,允许端口重用
// 循环监听客户端连接
while (true) {
System.out.println("等待客户端连接...");
Socket socket = serverSocket.accept();
System.out.println("客户端已连接:" + socket.getInetAddress());
// 创建新线程处理客户端请求
new Thread(new SocketHandler(socket)).start();
}
} catch (SocketException e) {
System.out.println("Socket异常:" + e.getMessage());
} catch (IOException e) {
System.out.println("IO异常:" + e.getMessage());
}
}
}
class SocketHandler implements Runnable {
private Socket socket;
public SocketHandler(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
// 处理客户端请求
// ...
// 关闭连接
socket.close();
} catch (IOException e) {
System.out.println("IO异常:" + e.getMessage());
}
}
}
```
在上述代码中,通过ServerSocket对象的setKeepAlive、setSoTimeout和setReuseAddress方法分别设置了SO_KEEPALIVE、超时时间和SO_REUSEADDR选项。同时,使用一个独立的线程来处理每个客户端连接,以充分利用服务器资源。
阅读全文