本帖最后由 青蛙的名单 于 2023-3-28 17:11 编辑
有的时候会有人很头疼,要传输一些信息但是呢没有什么好的手段,但事实上ServerListPing也是一个传输信息的好方法
服务端:
Bukkit样例代码:复制代码
客户端:
这里用的是纯纯JAVA:
复制代码
后台输出:
[ExampleOfPing] Received ping
[ExampleOfPing] /127.0.0.1
[ExampleOfPing] test:25565
好的,这个时候有人就有话说了,万一请求失败怎么办,返回值怎么处理,详见第二页
有的时候会有人很头疼,要传输一些信息但是呢没有什么好的手段,但事实上ServerListPing也是一个传输信息的好方法
服务端:
Bukkit样例代码:
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.Listener;
- import org.bukkit.event.server.ServerListPingEvent;
- import org.bukkit.plugin.java.JavaPlugin;
- public final class ExampleOfPing extends JavaPlugin implements Listener {
- @Override
- public void onEnable() {
- // Plugin startup logic
- getServer().getPluginManager().registerEvents(this, this);
- getLogger().info("ExampleOfPing is enabled");
- }
- @Override
- public void onDisable() {
- // Plugin shutdown logic
- }
- @EventHandler
- public void onPing(ServerListPingEvent event) {
- getLogger().info("Received ping");
- getLogger().info(event.getAddress().toString());
- getLogger().info(event.getHostname());
- }
- }
客户端:
这里用的是纯纯JAVA:
- import java.io.ByteArrayOutputStream;
- import java.io.DataInputStream;
- import java.io.DataOutputStream;
- import java.io.IOException;
- import java.net.InetSocketAddress;
- import java.net.Socket;
- public class test {
- public static void main(String[] args) throws IOException {
- Socket socket = new Socket();
- socket.connect(new InetSocketAddress("127.0.0.1",25565), 1000);
- DataOutputStream out = new DataOutputStream(socket.getOutputStream());
- DataInputStream in = new DataInputStream(socket.getInputStream());
- ByteArrayOutputStream b = new ByteArrayOutputStream();
- DataOutputStream handshake = new DataOutputStream(b);
- handshake.writeByte(0x00); //packet id for handshake
- writeVarInt(handshake, 4); //protocol version
- String data = "test";
- writeVarInt(handshake, data.length());
- handshake.writeBytes(data);
- handshake.writeShort(25565); //port
- writeVarInt(handshake, 1); //state
- writeVarInt(out, handshake.size()); //size of packet
- out.write(b.toByteArray()); //packet data
- out.flush();
- <blockquote> out.writeByte(0x01); //size of packet
后台输出:
[ExampleOfPing] Received ping
[ExampleOfPing] /127.0.0.1
[ExampleOfPing] test:25565
好的,这个时候有人就有话说了,万一请求失败怎么办,返回值怎么处理,详见第二页
可是我想在浏览器里访问mc的地址,应该做不到吧
3272418134 发表于 2023-3-27 16:14
可是我想在浏览器里访问mc的地址,应该做不到吧
那就要考虑反向代理了……
主要是我想在不增加服务器或端口的情况下,仅用现有的MC面板服提供web服务,看来是做不到了
woc我下午还在群里问这个问题,没想到有答案了
但是吧,有没有什么方法自动获取到连接的服务器IP端口呢,不通过forge
但是吧,有没有什么方法自动获取到连接的服务器IP端口呢,不通过forge
150149 发表于 2023-3-27 17:23
woc我下午还在群里问这个问题,没想到有答案了
但是吧,有没有什么方法自动获取到连接的服务器IP端口呢,不 ...
怎么自动法呢,为什么获取不到IP和端口,这个IP和端口就是服务器的IP和端口啊
青蛙的名单 发表于 2023-3-27 17:42
怎么自动法呢,为什么获取不到IP和端口,这个IP和端口就是服务器的IP和端口啊 ...
就是不写死到代码里面或者配置文件,玩家进哪个服就用哪个ip和端口,然后不用forge和mc库,只是netty和java,我想找的数据收发方案就是为了解决玩家进服信道和自定义信道分离的问题,实现自定义服务数据和玩家数据绑定,而不是我开两个客户端,一个连了自定义服务但没有进服,另一个进服了但没连自定义服务这种尴尬的情况
150149 发表于 2023-3-27 21:23
就是不写死到代码里面或者配置文件,玩家进哪个服就用哪个ip和端口,然后不用forge和mc库,只是netty和ja ...
你是在做定制化的客户端吗
3272418134 发表于 2023-3-28 09:46
你是在做定制化的客户端吗
不是,是做反作弊