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

我这样绑定到游戏服务器的端口:

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协议,我该如何解密?

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

最佳答案

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

让客户端先进行握手发送。让服务器从接收开始,如果不是正确的初始握手数据包,则关闭连接。

09-16 03:55