2009-04-04 7 views
2

부스트를 배우고 주간 서버 클라이언트를 example으로 컴파일했습니다. 예제에서는 포트 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; 
} 
+0

서버와 독립적으로 클라이언트를 사용해 보셨습니까? –

답변

1

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

무엇 부스트의 버전을하는 것은 당신이 사용하는 어떤 플랫폼이
  • 당신을 포함하여, 어떤 컴파일러를 사용하여 실행중인 버전

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

  • +0

    예, 외부 인터페이스를 바인딩하는 중 ... 감사합니다. – Milan

    1

    흠, 1_36 부스트 버전과 MSVC 2005 compiller의 모든 작품.
    방화벽 설정을 확인하십시오.

    1

    은 포트 옵션은 "주간"으로, 서비스의 이름이 될 수있는 문자열을 소요 한 다음 해당 포트 또는 명시 적으로 포트를 찾아 볼 것이다, 그러나 문자열이어야합니다 :

    tcp :: iostream s (argv [1], "8087"); 나를 위해 일한 무엇

    2

    내가

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

    첫 번째 방법에

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

    에서 엔드 포인트를 작성하는 방법을 변경했다 맥 OS X에서 잘 작동 0.0.0.0의 엔드 포인트를 작성합니다 그러나 Windows (XP, MSVC 2008로 구축)에서 "유효하지 않은"메시지를 제공합니다.

    나는 차이점을 알지도 모르지만, 적어도 그것이 작동합니다.

    관련 문제