2012-09-27 3 views
-1

간단한 클라이언트 - 서버 프로그램을 구현하고 있습니다. 내가 쓴 일부는 다음과 같습니다 :IP 주소를 여러 함수와 함께 사용하도록 선언하는 방법?

int main(void){ 
    using namespace boost::asio; 
    using namespace std; 
    const std::string ip = "localhost"; 
    const int port  = 10500; 
    ip::address addr = ip::address::from_string(ip); 
    ip::tcp::endpoint ep(addr, port); 
    ip::tcp::iostream s(ep); 

    s << "TERMINATE\n" << std::flush;} //This sends Terminate command to the server. 
    } 
    void function(void){ 
     s << "TERMINATE\n" << std::flush;} // This part doesn't work. 

     } 

저는 부스트 ASIO 및 네트워크 프로그래밍에 익숙하지 않습니다. Windows MingGW에서 작업하고 있습니다.

위의 코드에서와 같이 main 함수에서 ip 주소를 선언했지만 다른 함수에서 main 함수를 사용하려고 시도하면 main 함수가 작동하지 않습니다. 다음과 같은 오류가 있습니다 : 's'이 (가)이 범위에서 선언되지 않았습니다. 일반 변수라면 주 외부에 선언하고 다른 모든 함수는이를 공유 할 수 있습니다. 하지만 그건 그렇게하지 않을 것입니다. 어디서 어떻게 ip 주소와 포트를 선언해야합니까? 나는 여기 있다고 가정합니다

using namespace boost::asio; 
using namespace std; 
const std::string ip = "localhost"; 
const int port = 10500; 
ip::address addr = ip::address::from_string(ip); 
ip::tcp::endpoint ep(addr, port); 
ip::tcp::iostream s(ep); 

위 부분은 선언 중입니다.

답변

0

그냥 전역 변수로 지정할 수 있습니다. 예 :

using namespace boost::asio; 
using namespace std; 

ip::tcp::iostream s; 

int main(void){ 
    const std::string ip = "localhost"; 
    const int port  = 10500; 
    ip::address addr = ip::address::from_string(ip); 
    ip::tcp::endpoint ep(addr, port); 
    s = iostream(ep); 

    s << "TERMINATE\n" << std::flush;} //This sends Terminate command to the server. 
} 
void function(void){ 
    s << "TERMINATE\n" << std::flush;} 
} 

더 나은 해결책은 함수의 매개 변수로 전달하는 것입니다. 전역 변수는 일반적으로 사용하기에 좋지 않습니다.

using namespace boost::asio; 
using namespace std; 

int main(void){ 
    const std::string ip = "localhost"; 
    const int port  = 10500; 
    ip::address addr = ip::address::from_string(ip); 
    ip::tcp::endpoint ep(addr, port); 
    ip::tcp::iostream s(ep); 

    function(s); 
} 
void function(ip::tcp::iostream &s){ 
    s << "TERMINATE\n" << std::flush;} 
} 
+0

큰 도움을 주셔서 감사합니다. – user1639961