WSAEAFNOSUPPORT 错误
你好 我正在实现 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 错误。
在这里,我使用相同的套接字来联系服务器和其他对等方,这是这个原因吗? 我不明白这里出了什么问题。 它能够与服务器正确连接,但无法连接其他对等点。
Hi
I am implementing P2P chatting application where server will mediator for exchangeing IP and port to connecting peer.
I am getting WSAEAFNOSUPPORT 10047 error .
I have created UDP
socket
sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP );
then iam binding it to local ip and port.
if (bind(sockfd,(struct sockaddr *)&localaddr,sizeof(localaddr))<0)
{
Error_Code("create_socket:bind()");
return -1;
}
then I am contacting the server.
// connecting with server
sendto(sockfd,pBuffer,sizeof (nMessageType),0,(const sockaddr *)&config.serverAddr,size);
server keeps track of the other connected peer.once peer connects to the server it return ip and port of other peer.so a peer can use IP and port to directly connect to other peer.
but i am getting error while sending data to to other peer
// sending data to peer
int ret = sendto(sockfd,sendBuf,
sizeof(nMessagetype),0,(const sockaddr *)&m_peer.publicaddr,sockAddLen);
it return 10047 WSAEAFNOSUPPORT error.
Here I am using same socket to contact server and other peer is this reason for this?
I don't understand what is going wrong here.
It is able to connect with server properly but it is failing to connect other peer.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在 sendto 中指出并用于实际错误消息 WSAEAFNOSUPPORT 地址您用来发送的套接字与您发送的套接字不属于同一系列。
您必须确保
m_peer.publicaddr
中的地址与sockfd
属于同一系列。例如,如果您发送 IPv6 地址,
AF_INET
将不起作用(必须是AF_INET6
)Pointed out in the sendto and for the actual error message WSAEAFNOSUPPORT the address you are using to send to is not of the same family as the socket you are sending on.
You have to make sure that the address in
m_peer.publicaddr
is of the same family assockfd
.For instance, if you send an address for IPv6,
AF_INET
will not work (it would have to beAF_INET6
)