2009-04-04 5 views
2

Amélioration de l'apprentissage et compilé leur client de serveur de jour example. Comme je ne peux pas utiliser le port 13 qui est dans l'exemple, j'ai seulement changé les numéros de port dans l'exemple du serveur et du client. Le serveur fonctionne bien, mais le client ne se connecte pas semble-t-il, et aucune erreur n'est donnée.L'exemple de démarrage de serveur/client simple ne fonctionne pas

Les données d'entrée pour le client sont "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; 
} 
+0

Avez-vous essayé le client indépendamment du serveur? –

Répondre

1

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 utilisez-vous

Également, une chose à vérifier est de savoir si le serveur est lié à 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 ceci dans windows en utilisant ipconfig et en linux en utilisant ifconfig.

+0

Oui, c'était une interface externe contraignante ... merci – Milan

1

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

1

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

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

2

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" sur Windows (XP, construction avec MSVC 2008).

Je ne me dérangerait pas de savoir POURQUOI la différence, mais au moins cela fonctionne.