2011-04-05 1 views
1

ATL 서버 CAtlHttpCLient를 사용하여 서버에 HTTP 요청을 보냅니다.CAtlHttpClient - IP6 주소로 이동하면 작동하지 않는 것 같습니다.

는 기본적으로 내 코드는 다음과 같습니다

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 주소에서 작동하지 않습니다.

내부적으로 '['및 ']'문자는 URL에서 유효한 문자로 간주되지 않으며 URL은 http://%5bfe80::21a:a0ff:fec1:5917%6%5d:8090/someextrastuff과 같이 변환됩니다. 결과적으로 URL을 구문 분석 할 수 없습니다.

CAtlHttpClient가 IP4 및 IP6 주소를 모두 지원해야한다는 것을 이해했습니다. 그래서 나는 뭔가를 놓친 것 같습니다.

다른 방식으로 IP6 주소를 지정해야합니까?

또는 Navigate 기능에서 IP 주소를 지정할 수 없으며 항상 호스트 이름을 사용해야하며 클라이언트가 항상 호스트 이름을 확인할 수 있기를 바랍니다.

답변

1

내 버전의 ATL (Visual Studio 2005에 포함)에서 URL은 CUrl 도우미 클래스로 구문 분석됩니다. 그 클래스는 IPv6 주소를 지원하지 않습니다. 아마도 이것은 최신 버전에서 수정 되었습니까? 그렇지 않은 경우 수동으로 CUrl 객체를 만들고 오버로드 된 Navigate() 메서드에 전달할 수 있습니다.