Domanda

L'apprendimento spinta, e compilato il loro cliente del server di giorno esempio . Dal momento che non posso utilizzare la porta 13, che è l'esempio ho cambiato solo i numeri di porta nell'esempio server e client. Server funziona bene, per la squadra di client connettersi a quanto pare, ed è dato alcun errore.

I dati di ingresso per il cliente è "127.0.0.1".

Server:

#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 il 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;
}
È stato utile?

Soluzione

Un paio di cose contribuirebbero a eseguire il debug di questo per voi:

  1. Quale piattaforma sono in esecuzione
  2. Quali sono compilatore vostro usando, tra cui la versione
  3. Quale versione di spinta stai usando

Inoltre, una cosa da verificare è se il server è vincolante per 127.0.0.1 o l'interfaccia esterna. Provare a utilizzare l'indirizzo IP della propria interfaccia esterna invece di 127.0.0.1. Controllare questo in Windows utilizzando ipconfig e in Linux usando ifconfig.

Altri suggerimenti

Che cosa ha funzionato per me è stato quello di cambiare il modo in cui creo l'endpoint da

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

a

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

Il primo metodo crea un endpoint di 0.0.0.0 che funziona bene su Mac OS X, ma dà il messaggio "non valido" su Windows (XP, edificio con MSVC 2008).

Non mi dispiacerebbe sapere perché la differenza, ma almeno funziona.

Hmm, tutte le opere in versione 1_36 boost e msvc 2005 compiller.
Controllare le impostazioni del firewall.

L'opzione porta prende una stringa, che può essere il nome del servizio, come "giorno", e poi si cercherà la porta corrispondente, o esplicitamente la porta, ma deve essere una stringa:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top