5

UDP は ack を返信しませんが、応答は送信しますか?

クライアント サーバーの UDP プログラムをセットアップしました。存在しないサーバーにデータを送信するようにクライアントに指示した場合、クライアントは応答を受け取りますか?

私の仮定は次のとおりです。

クライアント --> ブロードキャスト サーバー アドレス (ARP) サーバー --> クライアントにその MAC アドレスを返信 (ARP) クライアントがサーバーにデータを送信 (UDP)

いずれの場合も、クライアントは ARP 応答のみを受信します。サーバーが存在するかどうかにかかわらず、UDP 応答を取得できませんか?

クライアントは sendto 関数を使用してデータを送信しています。sendto 呼び出し後にエラー情報を取得できます。

だから私の質問は、クライアントが何の応答も得ないときにこの情報をどのように利用できるかということです。エラー コードは、WSAGetLastError から取得できます。

存在しないホストにデータを送信しようとしましたが、sendto 呼び出しが成功しました。ドキュメントによると、戻り値 SOCKET_ERROR で失敗するはずです。

何かご意見は??

4

6 に答える 6

6

エラーを受信したり、宛先に到達しなかった UDP パケットを通知したりすることはありません。

于 2008-12-02T11:03:48.667 に答える
5

sendto通話は失敗しませんでした。データグラムが宛先に送信されました。

データグラムの受信者または途中のルーターがエラー応答を返す場合があります (ホストに到達できない、ポートに到達できない、TTL を超えている)。ただし、sendtoシステムが受信するまでに、通話は履歴になります。一部のオペレーティング システムでは、これが発生したことを確認する方法が提供されており、多くの場合、getsockopt呼び出しが行われます。ただし、エラー応答は、制御できないネットワークの状態に依存するため、いずれにしても信頼できないため、一般的には無視することをお勧めします。

UDP の上層にある適切なプロトコルは、応答を使用します。返信がない場合は、相手がデータグラムを受信して​​いないか、返信が返されていません。

于 2011-09-15T06:53:42.627 に答える
3

「UDPは、より単純なメッセージベースのコネクションレスプロトコルです。コネクションレスプロトコルでは、専用のエンドツーエンド接続をセットアップするための努力はありません。通信は、送信元から送信先への一方向に情報を送信することによって達成されます。参照を確認する必要はありません。宛先がまだそこにある場合、または情報を受信する準備ができている場合。」

于 2008-12-02T11:06:52.907 に答える
2

UDP プロトコルは IP の上に実装されます。MAC アドレスではなく、IP アドレスで識別されるホストに UDP パケットを送信します。

また、指摘したように、UDP 自体は応答を送信しません。それを行うには、自分でコードを追加する必要があります。次に、応答を期待するコードを追加し、応答が失われた場合に適切なアクションを実行する必要があります (通常、相手が「死んでいる」と判断するまで、タイマーで再送信します)。

于 2008-12-02T11:06:44.637 に答える
1

TCP/IP が提供する注文や検証のように信頼できる UDP が必要な場合は、RUDP または信頼できる UDP を参照してください。検証が必要な場合もありますが、UDP と TCP が混在していると、TCP の信頼性が低下し、ボトルネックが発生する可能性があります。

最も大規模な MMO のインスタント UDP と信頼性 UDP は、通信と信頼性の手段です。RUDP が行うのは、TCP/IP の小さな部分を追加して、すべてではなく特定のメッセージを検証および順序付けすることだけです。

一般的なゲーム開発ネットワーキング ライブラリは、これが組み込まれている Raknet です。

RUDP http://www.javvin.com/protocolRUDP.html

Raknet と Python を使用した RUDP の例 http://pyraknet.slowchop.com/

于 2009-06-11T23:52:36.243 に答える