【发布时间】:2018-11-20 23:18:41
【问题描述】:
我正在尝试通过 c++ 程序设置代理,但它不起作用。 该程序本身运行良好,但实际上,它没有设置任何内容。
这是代码:
#include <iostream>
#include <windows.h>
#include <string>
using namespace std;
void newproxy();
int main (){
int ch = 0;
cout << "Select the option:\n\n\t(1)Set a NEW proxy\n\t(2)View the current proxy settings\n\t(3)Clear ALL proxy settings\n\t(4)Exit\n\n\t";
cin >> ch;
cin.ignore();
switch (ch){
case 1 :
system("cls");
newproxy();
break;
case 2 :
system("cls");
system("netsh winhttp show proxy");
system("pause");
system("cls");
main();
break;
case 3 :
system("cls");
system("netsh winhttp reset proxy");
system("cls");
cout << "ALL proxy settings cleared\n\n";
main();
break;
case 4 :
return 0;
break;
}
}
void newproxy(){
string ip;
string port;
int ch = 0;
cout << "Insert ip: ";
getline (cin, ip);
cout << "Inster port: ";
getline(cin, port);
cout << "\nAre those the correct ip and port? " << ip << ":" << port << "\n\n\t(1)Yes (2)No (3)Abort\n\n\t";
cin >> ch;
cin.ignore();
switch (ch){
case 1 :
break;
case 2 :
system("cls");
newproxy();
break;
case 3 :
system("cls");
main();
break;
}
system(("netsh winhttp set proxy proxy-server="+ip+":"+port).c_str());
system("cls");
cout << "Proxy succesfully setted\n\n";
main();
}
当我设置一个新代理时,即使我重新启动程序,程序实际上也会看到并显示它,但实际上什么也没做。如果我打开浏览器并搜索“我的 IP”,它会显示与我在 Windows 设置中设置时不同的相同公共 IP。
有人可以帮助我吗? 是代码有问题还是其他问题?
谢谢。
【问题讨论】:
-
无关:
main和newproxy调用main。不要打电话给main。只有运行时应该调用main。如果一个程序调用main你得到Undefined Behaviour(UB),UB可以做任何事情。有时你会得到你想要的。有时你没有。有时你这样做,直到突然你不这样做。 UB是程序中可能发生的绝对最糟糕的事情。不惜一切代价避免它。而是将菜单代码分离到自己的函数中并调用菜单函数。 -
@user4581301 我什至没有注意到这一点。好电话。
-
system必须支持从裸机嵌入式系统开始的大量可能目标。不保证提供任何有用的反馈。您的程序使用它发出的命令可能会非常失败并且无法知道。幸运的是,您使用的是 Windows,我很确定system在我使用的每个针对 Windows 的工具链上都会返回程序的退出代码。检查返回码以确保命令有效。如果您没有得到有效的返回码,请尝试使用ShellExecute或ShellExecuteEx,Windows 系统调用可能会提供更多详细信息。