0

こんにちは私はサーバーが接続ピアへのIPとポートを交換するための仲介者となるP2Pチャットアプリケーションを実装しています。WSAEAFNOSUPPORT10047エラーが発生します。

UDPソケットを作成しました

sockfd = socket(AF_INET、SOCK_DGRAM、IPPROTO_UDP); 次に、それをローカルIPとポートにバインドするiam。

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); 10047WSAEAFNOSUPPORTエラーを返します。

ここで私はサーバーと他のピアに接続するために同じソケットを使用していますが、これはこの理由ですか?ここで何が悪いのかわかりません。サーバーとは正しく接続できますが、他のピアとの接続に失敗しています。

4

1 に答える 1

1

sendtoで指摘されており、実際のエラーメッセージWSAEAFNOSUPPORTで、送信に使用しているアドレスは、送信先のソケットと同じファミリではありません。

のアドレスがm_peer.publicaddrと同じファミリであることを確認する必要がありますsockfd。たとえば、IPv6のアドレスを送信した場合、AF_INETは機能しません(である必要がありますAF_INET6

于 2010-09-29T13:25:30.217 に答える