📄 server.java
字号:
package magic.net;
import java.io.*;
import java.net.*;
// 一个简单的服务器,它等待并监听远程连接服务请求
// 然后将服务请求委派给createService方法
public abstract class Server
implements Runnable
{
// 服务器连接的默认端口
public static final int DEFAULT_PORT = 1234;
// 服务所分配的端口
protected int port;
// 监听服务请求的ServerSocket
protected ServerSocket listener;
// 服务器执行线程
protected Thread exec;
// 当异常发生时,返回一个错误消息并退出
public static void fail(Exception e, String msg)
{
System.err.println(msg + ": " + e);
System.exit(1);
}
// 用给定的端口号创建一个新的Server对象
public Server(int portNo)
{
// 设置端口,确保它非负非零
port = (portNo <= 0) ? DEFAULT_PORT : portNo;
//
try {
listener = new ServerSocket(port);
}
catch (Exception e) {
fail(e, "Exception occured while creating server socket");
}
exec = new Thread(this);
}
// 启动执行线程
public final void start()
{
exec.start();
}
// 用指定的Socket创建一个服务
protected abstract void createService(Socket socket);
// 服务器线程的主要工作部分. 监听并接受客户端连接
public void run()
{
System.out.println("Server: listening on port " + port);
System.out.println("Server: use Ctrl-C to terminate service.");
try {
Thread thread = Thread.currentThread();
while (exec == thread) {
// 监听并接受连接
Socket clientSocket = listener.accept();
// 使用所接受的Socket创建服务
createService(clientSocket);
// 打印一个已连接消息到控制台
System.out.println("\nConnected to " + clientSocket.getInetAddress() +
" : " + clientSocket.getPort());
try {
Thread.sleep(25);
}
catch (InterruptedException e) {}
}
}
catch (IOException e) {
fail(e, "Exception while listening for connections");
}
}
} // Server
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -