Pergunta

fomentar a formação, e compilou seu cliente servidor diurna exemplo. Desde que eu não posso usar a porta 13 que está no exemplo que eu só mudou os números de porta no exemplo de servidor e cliente. Servidor funciona muito bem, mas o doesnt cliente conectar ao que parece, e nenhum erro é dada.

Os dados de entrada para o cliente é "127.0.0.1".

Servidor:

#include <ctime>
#include <iostream>
#include <string>
#include <boost/asio.hpp>

using boost::asio::ip::tcp;

std::string make_daytime_string()
{
  using namespace std; // For time_t, time and ctime;
  time_t now = time(0);
  return ctime(&now);
}

int main()
{
  try
  {
    boost::asio::io_service io_service;

    tcp::endpoint endpoint(tcp::v4(), 8087);
    tcp::acceptor acceptor(io_service, endpoint);

    for (;;)
    {
      tcp::iostream stream;
      acceptor.accept(*stream.rdbuf());
      stream << "test" << make_daytime_string();
    }
  }
  catch (std::exception& e)
  {
    std::cerr << e.what() << std::endl;
  }

  return 0;
}

E o cliente:

#include <iostream>
#include <string>
#include <boost/asio.hpp>

using boost::asio::ip::tcp;

int main(int argc, char* argv[])
{
  try
  {
    if (argc != 2)
    {
      std::cerr << "Usage: daytime_client <host>" << std::endl;
      return 1;
    }

    tcp::iostream s(argv[1], 8087);
    std::string line;
    std::getline(s, line);
    std::cout << line << std::endl;
  }
  catch (std::exception& e)
  {
    std::cout << "Exception: " << e.what() << std::endl;
  }

  return 0;
}
Foi útil?

Solução

Algumas coisas que ajudam a depurar isso para você:

  1. O que plataforma você está correndo
  2. O compilador são a sua utilização, incluindo a versão
  3. Qual versão do impulso que você está usando

Além disso, uma coisa a verificar é se o servidor é obrigatória a 127.0.0.1 ou a interface externa. Tente usar o endereço IP de sua interface externa em vez de 127.0.0.1. Verifique isso no Windows usando ipconfig e em linux usando ifconfig.

Outras dicas

O que funcionou para mim foi para mudar a maneira que eu criar o ponto final de

tcp::endpoint( tcp::v4(), port );

para

tcp::endpoint( boost::asio::ip::address::from_string("127.0.0.1"), port );

O primeiro método cria um ponto de extremidade de 0.0.0.0, que funciona bem no Mac OS X, mas dá a mensagem "não é válido" no Windows (XP, prédio com MSVC 2008).

Eu não me importaria saber por que a diferença, mas pelo menos ele funciona.

Hmm, todas as obras sobre 1_36 impulso versão e msvc 2005 compiller.
Verifique as configurações do firewall.

A opção de porta leva uma corda, que pode ser o nome do serviço, como "dia", e então ele vai procurar o porta correspondente, ou explicitamente a porta, mas deve ser uma string:

tcp :: iostream s (argv [1] "8087");

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