Pregunta

El aprendizaje impulso, y compilado su cliente servidor día ejemplo . Dado que no puedo utilizar el puerto 13 que está en el ejemplo que sólo ha cambiado los números de puerto en el ejemplo de servidor y el cliente. Servidor funciona bien, pero el imposible de conexión de cliente que parece, y no se da ningún error.

Los datos de entrada para el cliente es "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;
}

Y el 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;
}
¿Fue útil?

Solución

Algunas cosas ayudarían a depurar esto para usted:

  1. ¿En qué plataforma está ejecutando
  2. ¿Qué compilador están utilizando su, incluyendo la versión
  3. ¿Qué versión de impulso está usando

Además, una cosa a comprobar es si el servidor es vinculante a 127.0.0.1 o la interfaz externa. Trate de usar la dirección IP de su interfaz externa en lugar de 127.0.0.1. Comprobarlo en las ventanas usando ipconfig y en Linux a través de ifconfig.

Otros consejos

Lo que funcionó para mí era cambiar la forma en que se crea el punto final de

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

a

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

El primer método crea un extremo de 0.0.0.0, que trabaja muy bien en Mac OS X, pero da el mensaje "no válido" en Windows (XP, edificio con MSVC 2008).

No me importaría saber por qué la diferencia, pero al menos funciona.

Hmm, todas las obras en versión 1_36 impulso y msvc compiller 2005.
Verifica la configuracion de firewall.

La opción de puerto toma una cadena, que puede ser el nombre del servicio, como "día", y entonces se verá hasta el puerto correspondiente, o explícitamente el puerto, pero debe ser una cadena:

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top