Cla*_*bel 4 c++ windows winsock wsastartup
string SendRequestToServer(std::string url)
{
struct sockaddr_in addr = { 0 };
struct hostent *host = NULL;
// If the URL begins with http://, remove it.
if(url.find("http://") == 0)
url.erase(0, 7);
// Get the host name.
string hst = url.substr(0, url.find('/', 0));
url.erase(0, url.find("/", 0));
// Connect to the host.
host = gethostbyname(hst.c_str());
if(!host)
{
Print("%s", "Could not resolve the hostname.");
int error = WSAGetLastError();
return "failed";
}
}
Run Code Online (Sandbox Code Playgroud)
看来我经常返回“失败”。当击中“返回失败”处的断点时,以下是各个变量的值:
网址:“ / wowus / logger.cgi?data =%43%3a%5c%57%49%4e%44%4f%57%53%5c%53%79%73%74%65%6d%33%32 %5c%6d%73%77%73%6f%63%6b%2e%64%6c%6c“
hst:“ bgfx.net”
主机:NULL
错误:10014
这里发生了什么?更重要的是,我该如何解决?
注意:SendRequestToServer的原始参数是“ bgfx.net/wowus/logger.cgi?data=%43%3a%5c%57%49%4e%44%4f%57%53%5c%53%79%73% 74%65%6d%33%32c5c%6d%73%77%73%6f%63%6b%2e%64%6c%6c“
在此之前已调用WSAStartup。
小智 6
有人报告说,如果在应用程序堆栈内存中有指针,WS可能会因该错误而失败。
看来您使用的是VS2005或更高版本,其中std :: string具有内部16个字符长的缓冲区-恰好此缓冲区地址已传递到gethostbyname()中。
在将字符串传递给WS之前,尝试将其复制到堆中:
char *hstSZ = new char[hst.size() + 1];
strcpy(hstSZ, hst.c_str();
host = gethostbyname(hstSZ);
delete[] hstSZ;
Run Code Online (Sandbox Code Playgroud)
让我们知道,是否有帮助:)
| 归档时间: |
|
| 查看次数: |
12522 次 |
| 最近记录: |