0

我正在为 BungeeCord 服务器开发基于 Web 的 API,但是在端口 8082 上打开 ServerSocket 后,端口 25565 上的 BungeeCord 不再可用。

此类正在打开 ServerSocket:

package de.pardrox.bungeeapi;
import java.io.BufferedReader;

import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class HTTP {
    static router router = new router();
  public static void main(int args) {
    try {
            int port = args;
      @SuppressWarnings("resource")
    ServerSocket apiweb = new ServerSocket(port);
      for (;;) {
        Socket client = apiweb.accept();
        BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
        PrintWriter out = new PrintWriter(client.getOutputStream());

        out.print("HTTP/1.1 200 \r\n");
        out.print("Content-Type: text/plain\r\n");
        out.print("Connection: close\r\n");
        out.print("\r\n");

        String line;
        InetAddress ip_client = client.getInetAddress();
        main.syslog("Request of client "+ip_client.toString());
        while ((line = in.readLine()) != null) {
          if (line.length() == 0)
            break;
            if(line.toLowerCase().contains("GET".toLowerCase()))
            {
                String url = line.replace("GET ", "").replace(" HTTP/1.1", "");
                out.print(router.get(url));
            }
        }
        out.close();
        in.close();
        client.close();
      }
    }
    catch (Exception e) {
      System.err.println(e);
      System.err.println("Call HTTP(<port>)");
    }
  }
}

有谁知道为什么打开 ServerSocket 似乎会关闭 Gameserver 的 Socket?Eclipse 没有发现任何错误,并且游戏服务器本身似乎运行良好。API 也可以毫无问题地访问。

为了完整起见:我已经使用 HTTP.main(8082); 开始了套接字类。

4

1 回答 1

0

我认为 有一个错误for (;;)。这将创建一个将永远运行的无限循环......也许这会导致 BungeeCord 服务器的主线程停止响应。尝试删除for (;;)并使用下面的代码,而不是只在默认 BungeeCord 线程中运行代码。由于 BungeeCord 不允许您创建自定义线程,因此执行此操作的唯一方法是使用调度程序并运行 Runnable 异步。

ProxyServer.getInstance().getScheduler().runAsync(yourPluginHere, new Runnable() {
    @Override
    public void run() {
        // Put your code here
    }
});
于 2015-12-07T00:14:17.360 回答