gpt4 book ai didi

java - 在 Netty 中禁用 HTTP 协议(protocol)请求?

转载 作者:行者123 更新时间:2023-12-02 04:36:41 27 4
gpt4 key购买 nike

我正在用 Java 编写一个游戏服务器,我使用的是 Netty 3.6.2。游戏服务器不应接受任何 HTTP 请求,因为它们只是处理游戏客户端数据(纯粹是 TCP 上的字节)。当我加载http://server-ip:game-servers-port时在 Chrome 中,我下载了一个包含游戏握手数据包的文件(这不应该发生)。

我像这样绑定(bind)到游戏服务器的端口:

ChannelFactory factory = new NioServerSocketChannelFactory(Executors.newCachedThreadPool(), Executors.newCachedThreadPool());
clientAcceptor = new ServerBootstrap(factory);

clientAcceptor.setOption("child.tcpNoDelay", true);
clientAcceptor.setOption("child.keepAlive", false);

clientAcceptor.setPipelineFactory(() -> Channels.pipeline(new PacketDecoder(), new ClientHandler()));

clientAcceptor.bind(new InetSocketAddress(Configurations.CHANNEL_GAME_PORT));

我在 SimpleChannelHandler 中处理请求,就像这样

@Override
public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) {
// Encryption key code.

Packets.sendHello(ctx.getChannel(), ivRecv, ivSend);

ctx.getChannel().setAttachment(client);
}

如果传入请求使用 HTTP 协议(protocol),我该如何解密?

编辑:我还应该说,它还应该阻止 channel 连接上的任何 FTP、WebSocket 等协议(protocol)(本质上是任何不是游戏协议(protocol)的协议(protocol))。

最佳答案

如果您对接受的连接所做的第一件事就是发送某些内容,那么您就不能指望能够禁用 HTTP 请求。

客户端在握手中进行第一次发送。让服务器通过接收开始,如果不是正确的初始握手数据包,则关闭连接。

关于java - 在 Netty 中禁用 HTTP 协议(protocol)请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30659204/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com