2015-06-05 94 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請求。

客戶端做第一次握手發送。讓服務器開始接收數據,如果它不是正確的初始握手數據包,請關閉連接。

相關問題