我用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等协议(基本上不是游戏协议的任何内容)。
答案 0 :(得分:2)
如果您对接受的连接做的第一件事就是发送内容,那么您无法预期能够禁用HTTP请求。
让客户端在握手中进行第一次发送。让服务器以接收方式启动,如果没有正确的初始握手包,请关闭连接。