0

シンプルな UDP サーバーとクライアントがあります。

クライアントは DGRAM ソケットを作成し、それを (明示的に) バインドし (必要でなくても)、getsockname() (ゼロ以外) を使用してバインドされたポートを出力し、(sendto() を介して) メッセージを送信します。正常に配信されました。

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

何か案が?

更新: 私が解決した問題。以下の回答を参照してください。

4

1 に答える 1

2

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

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

于 2012-04-26T03:49:59.307 に答える