IPv6客户端无法连接到IPv6服务器

时间:2019-10-25 19:06:12

标签: c++ ipv6

我的程序是客户端服务器IPv6。客户端无法建立与服务器的连接?客户端和服务器必须使用回送地址 这段代码中的问题无法连接到服务器

Propagation.REQUIRED

1 个答案:

答案 0 :(得分:0)

客户端TCP套接字不能从connect()in6addr_any。 TCP服务器可以bind()in6addr_any,因此可以使用单个listen()在所有可用的本地IPv6网络接口上SOCKET。但是客户端必须connect()到服务器实际侦听的真实IPv6地址(例如in6addr_loopback,如果客户端与服务器在同一台计算机上运行。您的服务器可以使用{{1} }或GetAdaptersInfo()来发现其本地IP地址实际上是什么对客户端GetAdaptersAddresses()而言是有效的)。

此外,您需要将connect()结构完全归零。 sockaddr_in6包含您没有填充的sockaddr_in6sin6_flowinfo字段,因此它们将具有来自堆栈的随机值。 sin6_scope_id特别会影响sin6_scope_id使用正确的网络接口连接到服务器的能力。

connect()

请考虑改用SOCKET sock = socket(AF_INET6, SOCK_STREAM, 0); if (sock == INVALID_SOCKET) { cerr << "Can't create socket, Err #" << WSAGetLastError() << endl; WSACleanup(); return; } sockaddr_in6 hint = {}; hint.sin6_family = AF_INET6; hint.sin6_port = htons(port); inet_pton(AF_INET6, "server IPv6 address here", &(hint.sin6_addr)); // Connect to server int connResult = connect(sock, (sockaddr*)&hint, sizeof(hint)); ... 。让操作系统为您分配一个正确填充的getaddrinfo(),然后您可以按原样传递给sockaddr_in6(类似于我在您的previous question中为{{1} }。

connect()