您好 我正在实现P2P聊天应用程序,其中服务器将调解器用于交换IP和端口到连接对等体。 我收到WSAEAFNOSUPPORT 10047错误。
我创建了UDP 插座
sockfd = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); 然后我将它绑定到本地IP和端口。
if(bind(sockfd,(struct sockaddr *)& localaddr,sizeof(localaddr))< 0) { ERROR_CODE( “create_socket:绑定()”); 返回-1; }
然后我正在联系服务器。
//与服务器连接
sendto(sockfd,pBuffer,sizeof(nMessageType),0,(const sockaddr *)& config.serverAddr,size);
服务器跟踪另一个连接的peer.once peer连接到服务器它返回ip和其他peer的端口。所以peer可以使用IP和端口直接连接到其他peer。 但我在向其他同行发送数据时遇到错误
//向对等方发送数据
int ret = sendto(sockfd,sendBuf, sizeof(nMessagetype),0,(const sockaddr *)& m_peer.publicaddr,sockAddLen); 它返回10047 WSAEAFNOSUPPORT错误。
这里我使用相同的套接字联系服务器和其他同行是这个原因吗? 我不明白这里出了什么问题。 它能够正确连接服务器,但无法连接其他对等端。
答案 0 :(得分:1)
在sendto中指出,并且对于实际的错误消息WSAEAFNOSUPPORT,您用来发送到的地址与您发送的套接字不属于同一系列。
您必须确保m_peer.publicaddr
中的地址与sockfd
属于同一系列。
例如,如果您发送IPv6地址,则AF_INET
将无效(必须为AF_INET6
)