简单的服务器/客户端提升示例无效

时间:2022-09-06 21:32:23

Learning boost, and compiled their daytime server client example. Since I cant use port 13 that is in the example I only changed the port numbers in the server and client example. Server runs fine, but the client doesnt connect it seems, and no error is given.

学习提升,并编译他们的日间服务器客户端示例。由于我无法使用示例中的端口13,因此我只更改了服务器和客户端示例中的端口号。服务器运行正常,但客户端似乎没有连接它,并且没有给出错误。

Input data for the client is "127.0.0.1".

客户端的输入数据是“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;
}

And the 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;
}

4 个解决方案

#1


A few things would help to debug this for you:

一些事情将有助于为您调试:

  1. What platform are you running
  2. 你在运行什么平台

  3. What compiler are your using, including version
  4. 你使用什么编译器,包括版本

  5. What version of boost are you using
  6. 你正在使用什么版本的助推器

Also, one thing to check is whether the server is binding to 127.0.0.1 or the external interface. Try using the IP address of your external interface instead of 127.0.0.1. Check this in windows using ipconfig and in linux using ifconfig.

另外,要检查的一件事是服务器是绑定到127.0.0.1还是外部接口。尝试使用外部接口的IP地址而不是127.0.0.1。使用ipconfig在windows中检查,使用ifconfig在linux中检查。

#2


What worked for me was to change the way I create the endpoint from

对我有用的是改变我创建端点的方式

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

to

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

The first method creates an endpoint of 0.0.0.0 which works fine on Mac OS X, but gives the "not valid" message on Windows (XP, building with MSVC 2008).

第一种方法创建一个0.0.0.0的端点,它可以在Mac OS X上正常工作,但在Windows上提供“无效”消息(XP,使用MSVC 2008构建)。

I wouldn't mind knowing WHY the difference, but at least it works.

我不介意为什么会有这种差异,但至少它是有效的。

#3


Hmm, all works on 1_36 boost version and msvc 2005 compiller.
Check your firewall settings.

嗯,所有的工作都在1_36 boost版本和msvc 2005 compiller上。检查防火墙设置。

#4


The port option takes a string, which may be the name of the service, as "daytime", and then it will look up the corresponding port, or explicitly the port, but it must be a string:

port选项将一个字符串(可能是服务的名称)作为“daytime”,然后它将查找相应的端口,或显式地查找端口,但它必须是一个字符串:

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

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

#1


A few things would help to debug this for you:

一些事情将有助于为您调试:

  1. What platform are you running
  2. 你在运行什么平台

  3. What compiler are your using, including version
  4. 你使用什么编译器,包括版本

  5. What version of boost are you using
  6. 你正在使用什么版本的助推器

Also, one thing to check is whether the server is binding to 127.0.0.1 or the external interface. Try using the IP address of your external interface instead of 127.0.0.1. Check this in windows using ipconfig and in linux using ifconfig.

另外,要检查的一件事是服务器是绑定到127.0.0.1还是外部接口。尝试使用外部接口的IP地址而不是127.0.0.1。使用ipconfig在windows中检查,使用ifconfig在linux中检查。

#2


What worked for me was to change the way I create the endpoint from

对我有用的是改变我创建端点的方式

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

to

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

The first method creates an endpoint of 0.0.0.0 which works fine on Mac OS X, but gives the "not valid" message on Windows (XP, building with MSVC 2008).

第一种方法创建一个0.0.0.0的端点,它可以在Mac OS X上正常工作,但在Windows上提供“无效”消息(XP,使用MSVC 2008构建)。

I wouldn't mind knowing WHY the difference, but at least it works.

我不介意为什么会有这种差异,但至少它是有效的。

#3


Hmm, all works on 1_36 boost version and msvc 2005 compiller.
Check your firewall settings.

嗯,所有的工作都在1_36 boost版本和msvc 2005 compiller上。检查防火墙设置。

#4


The port option takes a string, which may be the name of the service, as "daytime", and then it will look up the corresponding port, or explicitly the port, but it must be a string:

port选项将一个字符串(可能是服务的名称)作为“daytime”,然后它将查找相应的端口,或显式地查找端口,但它必须是一个字符串:

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

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