【发布时间】:2018-07-24 16:29:22
【问题描述】:
MFC 是否支持Ipv6 套接字编程?
以便我们可以使用 Microsoft 基础类连接到具有Ipv6 地址的服务器? I have read this link 但对我帮助不大。
【问题讨论】:
-
谢谢,实际上我有一个 MFC 应用程序可以在 ipv4 上正常工作,但我想在同一个应用程序中使用 Ipv6 这可以吗???
MFC 是否支持Ipv6 套接字编程?
以便我们可以使用 Microsoft 基础类连接到具有Ipv6 地址的服务器? I have read this link 但对我帮助不大。
【问题讨论】:
CAsyncSocket 确实支持 IPv6。有几种方法可以做到这一点:
不过,我建议直接使用 Winsock 2 API。
【讨论】:
ConnectEx() 或BindEx(),但有Connect() 和Bind() 重载将SOCKADDR* 作为输入。是这个意思吗?
这里的代码对我有用:
LPCTSTR lpszHost = L"::1";
CSocket socket;
int nPort = 1234;
ADDRINFOT addrInfo;
memset( &addrInfo, 0, sizeof( addrInfo ) );
addrInfo.ai_family = AF_INET6;
addrInfo.ai_socktype = SOCK_STREAM;
if ( socket.CreateEx( &addrInfo ) )
{
struct sockaddr_in6 addr;
memset( (LPVOID)&addr, 0, sizeof( addr ) );
addr.sin6_family = AF_INET6;
addr.sin6_port = htons( nPort );
InetPtonW( AF_INET6, lpszHost, &addr.sin6_addr );
#ifdef MY_SOCKET_SERVER
// Server
BOOL bSuccess = socket.Bind( reinterpret_cast<const sockaddr*>(&addr), sizeof(sockaddr_in6) );
#else
// Client
BOOL bSuccess = socket.Connect( reinterpret_cast<const sockaddr*>(&addr), sizeof(sockaddr_in6) );
#endif
}
【讨论】: