Frage

Lernen zu steigern, und ihr Tages Server-Client zusammengestellt Beispiel . Da ich 13 Port verwenden kann nicht, die im Beispiel I geändert nur die Portnummern in dem Server- und Client-Beispiel. Server läuft gut, aber der Kunde tut verbindet es scheint, und kein Fehler gegeben ist.

Die Eingangsdaten für die Kunden "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;
}

Und der Kunde:

#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;
}
War es hilfreich?

Lösung

Ein paar Dinge würden helfen, das für Sie zu debuggen:

  1. Welche Plattform Sie läuft
  2. Welche Compiler Ihre Verwendung, einschließlich der Version
  3. Welche Version von Boost sind Sie mit

Auch ist eine Sache, zu prüfen, ob der Server auf 127.0.0.1 oder die externe Schnittstelle ist verbindlich. Versuchen Sie, die IP-Adresse des externen Schnittstelle statt 127.0.0.1 verwenden. Prüfen Sie dies in den Fenstern mit ipconfig und unter Linux mit ifconfig.

Andere Tipps

Was für mich gearbeitet wurde, wie ich aus dem Endpunkt erstellen ändern

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

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

Die erste Methode erzeugt einen Endpunkt von 0.0.0.0, die auf Mac OS X funktioniert gut, aber gibt die „ungültig“ -Nachricht auf Windows (XP, Gebäude mit MSVC 2008).

ich hätte nichts dagegen, warum der Unterschied zu wissen, zumindest aber es funktioniert.

Hmm, alle Arbeiten auf 1_36 Boost-Version und msvc 2005 compiller.
Überprüfen Sie Ihre Firewall-Einstellungen.

Der Port Option nimmt einen String, der den Namen des Dienstes sein kann, als „tagsüber“, und dann wird es den entsprechenden Port oder explizit den Hafen schauen, aber es muss eine Zeichenfolge sein:

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top