문제

학습 부스트 및 주간 서버 클라이언트를 컴파일했습니다 예시. 예제에있는 포트 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;
}
도움이 되었습니까?

해결책

몇 가지가 당신을 위해 이것을 디버깅하는 데 도움이 될 것입니다.

  1. 어떤 플랫폼을 실행하고 있습니까?
  2. 버전을 포함하여 어떤 컴파일러를 사용하고 있습니까?
  3. 어떤 버전의 부스트를 사용하고 있습니까?

또한 확인해야 할 것은 서버가 127.0.0.1 또는 외부 인터페이스에 바인딩하는지 여부입니다. 127.0.0.1 대신 외부 인터페이스의 IP 주소를 사용해보십시오. ipconfig와 ifconfig를 사용하여 Linux에서 Windows에서 확인하십시오.

다른 팁

나를 위해 일한 것은 내가 끝점을 만드는 방식을 바꾸는 것이 었습니다.

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

에게

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

첫 번째 방법은 Mac OS X에서 잘 작동하는 0.0.0.0의 엔드 포인트를 생성하지만 Windows에서 "유효하지 않은"메시지를 제공합니다 (XP, MSVC 2008을 사용하여 빌드).

나는 왜 그 차이를 알지 못하지만 적어도 그것이 효과가 있습니다.

흠, 모두 1_36 BOOST 버전 및 MSVC 2005 컴파일러에서 작동합니다.
방화벽 설정을 확인하십시오.

포트 옵션은 서비스의 이름 일 수있는 문자열을 사용하여 "Daytime"으로, 해당 포트를 찾거나 명시 적으로 포트를 찾아야하지만 문자열이어야합니다.

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top