int Socket::Connect(const std::string& host, int port)
{
if(this->_connected)
throw "Socket is already connected";
// Get the IP from the string
hostent* ip = gethostbyname(host.c_str());
/*if(server == NULL)
throw strerror(WSAGetLastError());*/
// Information for WinSock.
sockaddr_in addr;
// Clear up the memory
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
addr.sin_addr = *((in_addr *)ip->h_addr);
// Try and connect
if(WSAConnect(this->_socket, (sockaddr *)&addr, sizeof(addr), NULL, NULL, NULL, NULL) != 0)
throw strerror(WSAGetLastError()); // this is being thrown but not caught?
this->_connected = true;
return 0;
}
的错误是这个C++代码为什么不起作用?
“未知错误”
,这里是主要的功能
int _tmain(int argc, _TCHAR* argv[])
{
try{
Socket* socket = new Socket();
if(socket->Connect("google.com", 80) == 0)
std::cout << "[-] connected..." << endl;
std::string line = socket->RecvLine();
std::cout << line << endl;
}
catch(char* errcstr)
{
std::cout << errcstr << endl;
}
catch(int err)
{
std::cout << err << endl;
}
catch(std::string errstr)
{
std::cout << errstr << endl;
}
catch(exception ex)
{
std::cout << ex.what() << endl;
}
system("pause");
return 0;
}
所以应该捕获任何异常,据我所知。我怎样才能解决这个问题? (因为它连接到google.com和winsock被初始化等,所以不应该有任何例外)
更新:错误实际上是在WSAConnect之后引发的,但应该没有连接问题,也没有我的catch声明由于某种原因正在使用。
更新2:现在它捕捉错误,但它说“未知的错误”,这对我没用。为什么不能连接到谷歌?
求助:谢谢!所以你需要一个catch(字符*错误)
'gethostbyname'是一个C API,不会抛出C++异常。你确定这是错误发生的地方吗? – 2010-06-20 02:36:58
启用一次机会异常处理(在Visual Studio中,Ctrl + Alt + E并选中所有复选框)并运行附加到调试器。这将允许您在抛出异常时中断。 – 2010-06-20 02:40:05
谢谢詹姆斯。在WSAConnect之后就是一个例外(所以它没有连接,并且我的catch语句没有出于某种原因正在工作) – 2010-06-20 02:52:44