Есть ли поддержка программирования сокетов Ipv6 с помощью MFC
чтобы мы могли подключиться к серверу, имеющему адрес Ipv6, с помощью базовых классов Microsoft? Я прочитал эту ссылку, но мне это не сильно помогает.





CAsyncSocket действительно поддерживает IPv6. Для этого есть несколько способов:
Однако я бы предложил напрямую использовать Winsock 2 API.
спасибо, я не получил метод ConnectEd, не могли бы вы поделиться мне ссылкой
@AndrewKomiagin нет упоминания о ConnectEx() или BindEx() в документация, но есть перегрузки Connect() и Bind(), которые принимают SOCKADDR* в качестве входных данных. Это то, что ты имеешь в виду?
@AndrewKomiagin Я использовал ConnectEx () для подключения по методу ipv6. Я получаю этот код ошибки 10047 «Семейство адресов не поддерживается семейством протоколов». Пожалуйста, подтвердите, что эта функция работает или нет для ipv6.
Приведите минимальный пример. Вы инициализировали winsock?
Я инициализировал winsock, но по-прежнему эта ошибка 10047: - «Был использован адрес, несовместимый с запрошенным протоколом. Все сокеты создаются со связанным семейством адресов (то есть AF_INET для интернет-протоколов) и общим типом протокола (то есть SOCK_STREAM ) "это означает, что AF_INET6 нельзя использовать
Взгляните на реализацию сокета filezilla. Он использует тот же интерфейс, что и CAsyncSocket. github.com/baloonwj/filezilla/tree/master/…
Я не мог вам помочь, так как вы не привели ничего, даже минимального примера. То, как вы инициализируете слой сокетов, создаете / подключаетесь и т. д.
@Andrew Komiagin я выложил код для клиентской части
Код здесь работает для меня:
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
}
спасибо, на самом деле у меня есть одно приложение MFC, работающее нормально с ipv4, но я хочу использовать Ipv6 в том же приложении. Возможно ли это ???