2015-06-05 59 views
0

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

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

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

HTTP协议详细介绍在它的RFC https://tools.ietf.org/html/rfc2616 –

回答

2

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

客户端做第一次握手发送。让服务器开始接收数据,如果它不是正确的初始握手数据包,请关闭连接。

相关问题