2011-06-21 92 views
1

我的服务器正在创建一个IPV6套接字。套接字连接时出错

在客户端上,我创建了一个IPV4套接字。 现在,在客户端的连接API中,我传递了IPV4和IPV6地址结构的套接字描述符。 (sock,(SocketAddress *)in6_addr,(int)sizeof(sockaddr_in6))== 0) 其中struct sockaddr_in6 in6_addr;

我收到错误的连接。是由于这个或其他原因? 请注意,我的服务器是IPV6(具有IPV6地址)

+0

听起来像你刚刚'决定'使用IPv6,却没有真正理解它是什么,以及什么会或不会工作。 –

+0

谢谢杰里米。无论如何,我只是想知道,如果我使用IPV4创建套接字并将IPV6格式的地址转换为IPV4格式,那么连接可能会建立。如果我错了,请纠正我。 –

+0

你可能是错的,因为你没有显示你如何转换的代码,你没有描述你正在使用的平台。现代操作系统将允许您的IPv4客户端与IPv6服务器通信(服务器将看到一个IP4映射的IP6地址)。如果你用必要的细节编辑你的问题,SO可能会对你更有帮助。 – Andrey

回答

3

您必须使用IPV6套接字连接到IPV6地址,或使用隧道服务,该服务会将IPV4地址的流量转换为IPV6地址或从IPV6地址转换IP地址。

+0

@Edwin ...你可以建议如何隧道IPV6地址到IPV4地址。我想这可以解决我的问题。谢谢 –

+0

http://www.networkworld.com/news/2010/050610-ipv6-tunnel-basics.html是一个很好的介绍性开始。这听起来像你需要评估你的环境可以工作/可用的东西。 –

2

在客户端我创建一个IPv4套接字

为什么?不要这样做。如果您的客户端程序创建AF_INET套接字(或者仅在ip4-only操作系统上运行),则在客户端上没有任何事情可以执行以实现此类连接。

如果您只需要这么做 - 那么它应该适合处理IPv4客户端的服务器。

服务器也许能够接受来自客户端的IP4的连接请求 - 但如果服务器端禁用IPV6_V6ONLY套接字选项,很明显,如果服务器的操作系统允许它只能发生。在这种情况下,ip6服务器将通过ipv4-mapped ipv6地址看到ip4客户端。