質問

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

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

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

クライアント->ブロードキャストサーバーアドレス(ARP) サーバー-> MACアドレス(ARP)を使用してクライアントに返信する クライアントはサーバー(UDP)にデータを送信します

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

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

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

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

考えはありますか?

役に立ちましたか?

解決

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

他のヒント

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

データグラムの受信者またはその途中のルーターは、エラー応答(ホスト到達不能、ポート到達不能、TTL超過)を返す場合があります。ただし、 sendto 呼び出しは、システムがそれを受信するまでに履歴になります。一部のオペレーティングシステムは、多くの場合 getsockopt 呼び出しを使用して、これが発生したことを確認する方法を提供します。ただし、制御できないネットワーク条件に依存するため、いずれにしてもエラー応答の取得に頼ることはできないため、通常は無視するのが最善です。

UDPの上位に階層化された感知可能なプロトコルは応答を使用します。返信がない場合は、相手がデータグラムを取得していないか、返信が返ってこませんでした。

  

" UDPは、よりシンプルなメッセージベースのコネクションレスプロトコルです。コネクションレス型プロトコルでは、専用のエンドツーエンド接続をセットアップする努力は行われません。通信は、宛先がまだ存在するかどうかを確認せずに、または情報を受信する準備ができているかどうかを確認せずに、一方向で情報を送信元から宛先に送信することによって実現されます。

パケットの送信先のマシンは、ICMP UDPポート到達不能メッセージで応答する場合があります。

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

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

TCP / IPでRUDPまたはReliable UDPを確認できるように、注文や検証などで信頼できるUDPが必要な場合。検証が必要な場合もありますが、UDPとTCPの混合がTCPの信頼性に留まり、ボトルネックが発生する可能性があります。

Isntance UDPおよびReliablity UDPのほとんどの大規模MMOでは、通信と信頼性の手段です。 RUDPは、TCP / IPの一部を追加して、すべてではなく特定のメッセージを検証および順序付けします。

一般的なゲーム開発ネットワークライブラリは、これを組み込んだRaknetです。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top