2015-06-05 3 views
0

Я пишу игровой сервер на Java, и я использую Netty 3.6.2. Игровые серверы не должны принимать HTTP-запросы, так как они просто обрабатывают данные клиентских клиентов (которые являются чисто байтами через TCP). Когда я загружаю http://server-ip:game-servers-port в Chrome, я загружаю файл с помощью рукопожатия с игрой (чего не должно произойти).Отключение запросов HTTP-протокола в Netty?

я привязку к порту игрового сервера так:

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-запросы, если первое, что вы делаете с принятым соединением, - это отправить что-то.

Имейте клиента выполните первую отправку рукопожатия. Запустите сервер, выполнив получение, и если это не правильный исходный пакет подтверждения, закройте соединение.

Смежные вопросы