青蛙的名单
本帖最后由 青蛙的名单 于 2023-3-28 17:11 编辑

有的时候会有人很头疼,要传输一些信息但是呢没有什么好的手段,但事实上ServerListPing也是一个传输信息的好方法
服务端:
Bukkit样例代码:
  1. import org.bukkit.event.EventHandler;
  2. import org.bukkit.event.Listener;
  3. import org.bukkit.event.server.ServerListPingEvent;
  4. import org.bukkit.plugin.java.JavaPlugin;
  5. public final class ExampleOfPing extends JavaPlugin implements Listener {

  6.     @Override
  7.     public void onEnable() {
  8.         // Plugin startup logic
  9.         getServer().getPluginManager().registerEvents(this, this);
  10.         getLogger().info("ExampleOfPing is enabled");
  11.     }

  12.     @Override
  13.     public void onDisable() {
  14.         // Plugin shutdown logic
  15.     }

  16.     @EventHandler
  17.     public void onPing(ServerListPingEvent event) {
  18.         getLogger().info("Received ping");
  19.         getLogger().info(event.getAddress().toString());
  20.         getLogger().info(event.getHostname());
  21.     }
  22. }
复制代码


客户端:
这里用的是纯纯JAVA:
  1. import java.io.ByteArrayOutputStream;
  2. import java.io.DataInputStream;
  3. import java.io.DataOutputStream;
  4. import java.io.IOException;
  5. import java.net.InetSocketAddress;
  6. import java.net.Socket;

  7. public class test {
  8.     public static void main(String[] args) throws IOException {
  9.         Socket socket = new Socket();
  10.         socket.connect(new InetSocketAddress("127.0.0.1",25565), 1000);
  11.         DataOutputStream out = new DataOutputStream(socket.getOutputStream());
  12.         DataInputStream in = new DataInputStream(socket.getInputStream());
  13.         ByteArrayOutputStream b = new ByteArrayOutputStream();
  14.         DataOutputStream handshake = new DataOutputStream(b);
  15.         handshake.writeByte(0x00); //packet id for handshake
  16.         writeVarInt(handshake, 4); //protocol version
  17.         String data = "test";
  18.         writeVarInt(handshake, data.length());
  19.         handshake.writeBytes(data);
  20.         handshake.writeShort(25565); //port
  21.         writeVarInt(handshake, 1); //state
  22.         writeVarInt(out, handshake.size()); //size of packet
  23.         out.write(b.toByteArray()); //packet data
  24.         out.flush();
  25. <blockquote>        out.writeByte(0x01); //size of packet
复制代码

后台输出:
[ExampleOfPing] Received ping
[ExampleOfPing] /127.0.0.1
[ExampleOfPing] test:25565

好的,这个时候有人就有话说了,万一请求失败怎么办,返回值怎么处理,详见第二页


3272418134
可是我想在浏览器里访问mc的地址,应该做不到吧

青蛙的名单
3272418134 发表于 2023-3-27 16:14
可是我想在浏览器里访问mc的地址,应该做不到吧

那就要考虑反向代理了……

3272418134
主要是我想在不增加服务器或端口的情况下,仅用现有的MC面板服提供web服务,看来是做不到了

150149
woc我下午还在群里问这个问题,没想到有答案了
但是吧,有没有什么方法自动获取到连接的服务器IP端口呢,不通过forge

青蛙的名单
150149 发表于 2023-3-27 17:23
woc我下午还在群里问这个问题,没想到有答案了
但是吧,有没有什么方法自动获取到连接的服务器IP端口呢,不 ...

怎么自动法呢,为什么获取不到IP和端口,这个IP和端口就是服务器的IP和端口啊

150149
青蛙的名单 发表于 2023-3-27 17:42
怎么自动法呢,为什么获取不到IP和端口,这个IP和端口就是服务器的IP和端口啊 ...

就是不写死到代码里面或者配置文件,玩家进哪个服就用哪个ip和端口,然后不用forge和mc库,只是netty和java,我想找的数据收发方案就是为了解决玩家进服信道和自定义信道分离的问题,实现自定义服务数据和玩家数据绑定,而不是我开两个客户端,一个连了自定义服务但没有进服,另一个进服了但没连自定义服务这种尴尬的情况

3272418134
150149 发表于 2023-3-27 21:23
就是不写死到代码里面或者配置文件,玩家进哪个服就用哪个ip和端口,然后不用forge和mc库,只是netty和ja ...

你是在做定制化的客户端吗

150149
3272418134 发表于 2023-3-28 09:46
你是在做定制化的客户端吗

不是,是做反作弊

第一页 上一页 下一页 最后一页