2012-04-25 12 views
0

私は単純なUDPサーバーとクライアントを持っています。recvfrom()は送信者ポートを0(ゼロ)として返します

クライアントはDGRAMソケットを作成し、明示的にバインドし(必要でない場合でも)、getsockname()(ゼロ以外)を使用してバインドされたポートを出力してからsendto ))。

サーバーはrecvfrom()を使用してメッセージを受信します。メッセージは正しく受信されましたが、送信者のポート番号はゼロです。受信した最初のメッセージ(ntohs()を使用しています)。 2番目のメッセージからは、ポート番号が正しく表示されます(つまり、クライアントがバインドされたことを示すクライアントと同じもの)。

更新:問題は私によって解決されました。以下の回答を参照してください。

+0

これを実行しているプラ​​ットフォームは何ですか? – Sniggerfardimungus

+0

問題を解決しました。問題が更新されました。 –

答えて

2

私はこの問題を解決しました。 recvfrom()の最後の引数が

socklen_t from_len;
であるとすると、recvfrom()呼び出しの前に
from_len = sizeof(struct sockaddr_in);
(IPv4の場合)を設定する必要があります。ちょっと、私はそれを知っているが、時にはあなたの心をスキップすることができます:-)

関連する問題