Como boost.asio descobrir qual porta é o meu servidor de aplicativo de escuta on?

StackOverflow https://stackoverflow.com/questions/578794

  •  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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top