Question

promouvoir l'apprentissage, et compilé leur client de serveur de jour exemple . Depuis que je ne peux pas utiliser le port 13 qui est dans l'exemple que je ne changé les numéros de port dans l'exemple du serveur et le client. Serveur fonctionne très bien, mais le client ne marche pas connecter il semble, et aucune erreur est donnée.

Les données d'entrée pour le client est "127.0.0.1."

Serveur:

#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;
}

Et le client:

#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;
}
Était-ce utile?

La solution

Quelques choses contribueraient à déboguer pour vous:

  1. Quelle plate-forme vous exécutez
  2. Quel compilateur sont vos utilisez, y compris la version
  3. Quelle version de boost que vous utilisez

En outre, une chose à vérifier est de savoir si le serveur est obligatoire pour 127.0.0.1 ou l'interface externe. Essayez d'utiliser l'adresse IP de votre interface externe au lieu de 127.0.0.1. Vérifiez dans Windows en utilisant ipconfig et linux en utilisant ifconfig.

Autres conseils

Ce qui a fonctionné pour moi était de changer la façon dont je crée le point final de

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

à

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

La première méthode crée un point de 0.0.0.0 qui fonctionne très bien sur Mac OS X, mais donne le message "non valide" sous Windows (XP, avec la construction de MSVC 2008).

Je ne me dérangerait pas savoir pourquoi la différence, mais au moins il fonctionne.

Hmm, tous les travaux sur la version boost 1_36 et msvc 2005 compiller.
Vérifiez vos paramètres de pare-feu.

L'option port prend une chaîne, qui peut être le nom du service, comme « jour », et il recherchera le port correspondant, ou explicitement le port, mais il doit être une chaîne:

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top