⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 server.java

📁 java learn PPT java learn PPT java learn PPT java learn PPT
💻 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 + -