0

嗨,我正在实现 P2P 聊天应用程序,其中服务器将调解交换 IP 和端口以连接对等方。我收到 WSAEAFNOSUPPORT 10047 错误。

我已经创建了 UDP 套接字

sockfd = 套接字(AF_INET,SOCK_DGRAM,IPPROTO_UDP);然后我将它绑定到本地 ip 和端口。

if (bind(sockfd,(struct sockaddr *)&localaddr,sizeof(localaddr))<0) { Error_Code("create_socket:bind()"); 返回-1;}

然后我正在联系服务器。

// 连接服务器

sendto(sockfd,pBuffer,sizeof (nMessageType),0,(const sockaddr *)&config.serverAddr,size);

服务器跟踪其他连接的对等点。一旦对等点连接到服务器,它返回其他对等点的 IP 和端口。因此对等点可以使用 IP 和端口直接连接到其他对等点。但我在向其他对等方发送数据时出错

// 向对等方发送数据

int ret = sendto(sockfd,sendBuf, sizeof(nMessagetype),0,(const sockaddr *)&m_peer.publicaddr,sockAddLen); 它返回 10047 WSAEAFNOSUPPORT 错误。

在这里,我使用相同的套接字来联系服务器和其他对等方是这个原因吗?我不明白这里出了什么问题。它能够与服务器正确连接,但无法连接其他对等方。

4

1 回答 1

1

在sendto和实际错误消息WSAEAFNOSUPPORT中指出,您用于发送的地址与您发送的套接字不属于同一个系列。

您必须确保 in 中的地址m_peer.publicaddrsockfd. 例如,如果您发送 IPv6 的地址,AF_INET将不起作用(它必须是AF_INET6

于 2010-09-29T13:25:30.217 回答