Como boost.asio descobrir qual porta é o meu servidor de aplicativo de escuta on?
-
06-09-2019 - |
Pergunta
é um pouco estranho para mim que boost.asio doesn`t usar conceito básico quando o aplicativo cliente se conectar ao servidor - usando o endereço IP e porta. Pode ser que eu sou um pouco noobie pouco em Boost - e eu aceito isso -. Mas de qualquer maneira eu não entendo
Então, eu tenho um código como este para obter o cliente conectado ao servidor no localhost:
boost::asio::io_service io_service;
tcp::resolver resolver(io_service);
tcp::resolver::query query("localhost", "daytime");
tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
tcp::resolver::iterator end;
tcp::socket socket(io_service);
boost::system::error_code error = boost::asio::error::host_not_found;
while(error && endpoint_iterator != end) {
socket.close();
socket.connect(*endpoint_iterator++, error);
}
Windows em seus usos WinSock 2.0 dois parâmetros - IP e porta - para identificar o servidor.
Assim, o qurestion é - como exatamente achados Asio fora que porta é o servidor escuta para conexões on? Será que ele verifica todas as portas? E, se isso acontecer, o que vai acontecer se dois servidores escutando em portas diferentes ao mesmo tempo?
Solução
Você está dizendo que você deseja se conectar a localhost na porta usada pelo serviço diurno. Ele vai olhar para cima o número de porta apropriado no arquivo de serviços (geralmente C: \ WINDOWS \ system32 \ drivers \ etc \ services no Windows, eu acredito / etc / serviços sob Unix). Você também pode usar um número de porta explícita lá.
Outras dicas
Tente,
tcp::resolver::query query("localhost", boost::lexical_cast<string>(port));//assuming port is an int
Para responder à sua pergunta, lembre-se que você está começando o servidor na porta 13. Isto acontece por ser a porta que executa o serviço Linux diurna (http://www.sorgonet.com/linux/linuxdaemons/) . Assim, eles são posteriormente capaz de usar consulta ( "localhost", "dia") em vez de especificar a porta.
netcat aberta escutar na porta 13 no localhost ele irá aceitar a conexão do demonstração. digite algum blabla quando ele se conecta e você vai ver a saída no programa de demonstração para executar o netcat, execute: nc -l -p 13
janelas? não netcat? instalar cygwin, e adicionar netcat