Я реализую простую клиент-серверную программу. Некоторые части я написал это:
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.
Как и в приведенном выше коде, я объявил IP-адрес в основной функции, но когда я пытаюсь использовать его в других функциях, объявленных вне основной, он не работает. Поставляется с ошибкой вроде:
‘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);
выше часть делает декларацию.
Вы можете просто сделать его глобальной переменной. Что-то вроде,
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;}
}
Других решений пока нет …