如何声明 IP 地址以将其与多种功能一起使用

How to declare ip address to use it with multiple functions?

本文关键字:功能 一起 何声明 声明 地址 IP      更新时间:2023-10-16

我正在实现一个简单的客户端-服务器程序。我写的一些部分是:

  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 << "TERMINATEn" << std::flush;} //This sends Terminate command to the server.
   }
  void function(void){
       s << "TERMINATEn" << std::flush;} // This part doesn't work.
      }

我是助推 asio 和网络编程的新手。并在窗户上工作。

如上面的代码,我在 main 函数中声明了 IP 地址,但是当我尝试在 main 之外声明的其他函数中使用它时,它不起作用。带有如下错误:"s"未在此范围内声明。如果它是一个普通变量,我会在 main 之外声明它,所有其他函数都可以共享。但这对此不起作用。您需要在何处以及如何声明 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);

上面的部分是做声明。

你可以

把它变成一个全局变量。像这样,

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 << "TERMINATEn" << std::flush;} //This sends Terminate command to the server.
}
void function(void){
    s << "TERMINATEn" << 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 << "TERMINATEn" << std::flush;}
 }