Простой пример ускорения сервера / клиента не работает - PullRequest
2 голосов
/ 04 апреля 2009

Учимся ускоряться и компилируем свой дневной сервер-клиент Пример . Поскольку я не могу использовать порт 13, который есть в примере, я изменил только номера портов в примере сервера и клиента. Сервер работает нормально, но, похоже, клиент не подключается, и ошибки не выдается.

Входные данные для клиента: «127.0.0.1».

Сервер:

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

И клиент:

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

Ответы [ 4 ]

2 голосов
/ 18 июня 2011

Для меня сработало изменение способа создания конечной точки с

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

до

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

Первый метод создает конечную точку 0.0.0.0, которая отлично работает в Mac OS X, но выдает «недопустимое» сообщение в Windows (XP, сборка с MSVC 2008).

Я не возражаю, зная, ПОЧЕМУ разница, но, по крайней мере, она работает.

1 голос
/ 05 апреля 2009

Несколько вещей помогут отладить это для вас:

  1. На какой платформе вы работаете
  2. Какой компилятор вы используете, включая версию
  3. Какую версию Boost вы используете

Также необходимо проверить, привязан ли сервер к 127.0.0.1 или к внешнему интерфейсу. Попробуйте использовать IP-адрес вашего внешнего интерфейса вместо 127.0.0.1. Проверьте это в Windows с помощью ipconfig и в Linux с помощью ifconfig.

1 голос
/ 01 октября 2010

Параметр порта принимает строку, которая может быть именем службы, как «дневное время», а затем он ищет соответствующий порт или явно порт, но это должна быть строка:

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

1 голос
/ 05 апреля 2009

Хм, все работает на бустовой версии 1_36 и компиляторе msvc 2005.
Проверьте настройки брандмауэра.

...