我正在使用ATL Server CAtlHttpCLient将HTTP请求发送到服务器。
基本上我的代码如下所示:
ATL::CAtlHttpClient client;
ATL::CAtlNavigateData navigateData;
navigateData.SetSocketTimeout(60000);
navigateData.SetMethod(ATL_HTTP_METHOD_POST);
BX_TString jmfmime = "application/vnd.cip4-jmf+xml";
navigateData.SetPostData((BYTE*) msg.c_str(), msg.length(), jmfmime.c_str());
client.Navigate("http://[fe80::21a:a0ff:fec1:5917%6]:8090/someextrastuff", &navigateData);
当我使用IP4地址连接时,一切都像最好的一样。但是,Navigate功能似乎不适用于IP6地址。
在内部,“[”和“]”字符不会被视为网址中的有效字符,而且网址会转换为此类http://%5bfe80::21a:a0ff:fec1:5917%6%5d:8090/someextrastuff
。因此,无法解析URL。
我知道CAtlHttpClient应该同时支持IP4和IP6地址。所以我似乎错过了一些东西。
我应该以不同的方式指定IP6地址吗?
或者我不允许在Navigate功能中指定IP地址,我是否应该始终使用主机名并希望客户端始终能够解析主机名?
答案 0 :(得分:1)
在我的ATL版本(包含在Visual Studio 2005中)中,使用CUrl帮助程序类解析URL;该类似乎不支持IPv6地址。也许这是在更新的版本中修复的?如果没有,您可以手动构建CUrl对象并将其传递给重载的Navigate()方法。