• ベストアンサー

UDPについて

こんばんは。 UDPについてうまく理解できず困っております。 お分かりになる方がいらっしゃいましたら、教えて下さい。 わからないのはUDPでのクライアント-サーバ間での通信方法です。 例えばこちらからあるコマンドを投げたとして、向こうから結果が返ってくるとします。 UDPなのでこちらからはじゃんじゃん投げます。 サーバからもじゃんじゃん返ってきます。 でも投げるコマンドによって処理時間が違うので 返ってくるデータの順番がバラバラになってしまう可能性があると思うのです。 TCPだとコネクションはって1対1というイメージがあるのですが、 UDPはやりたい放題(?)というイメージがあります。 順番がバラバラになってしまうのはもうどうしようもないことなのでしょうか? それともプログラミングのテクニック(?)で解消できるものなのでしょうか? 1コマンド1Threadにして管理すれば良いのでしょうか? (こうすると、このコマンドに対しての結果はこれって識別できますよね???) 一人ではどうにも前に進めないので、ご指導宜しくお願いします。 意味不明な部分は補足させていただきます。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

>>それじゃTCPとUDPの違いって??? >>コネクションをはるかはらないかの違いでしかないんですか? 正解!、大きな違いはそこだけです。 しかしコネクションの確立後はデータは保証されているので正確に通信が保てると言うことです。 (IPパケットレベルの保証はUDPとTCP同じなのでUDPは信頼性が低いとは一概には言えない) 簡単に言うと(ご存知ですねこの辺) TCPは、パケット送信中に毎回 相手に届いたかどうかを確認して順次データの受け渡しをする。 UDPは、その確認が無いので、速い。 No2の補足にあるコメントだと その仕組みで UDP通信するよりいっそTCP でやった方が良いと思います<わざわざUDPを使ってTCPの仕組みを作るのは二度でまかと・・・

yukki-111
質問者

お礼

再度の書込みありがとうございます。 わかりやすい説明をありがとうございます。 こちらで教えていただいたおかげでやっと感覚つかめました!! 迷走中だったプログラムをただ今コーディングしなおしています・笑 実はTCPもあるんですよ。 でもUDPのやつも作れと言われました…。 あとTelnetとRSHもあって、初心者の私にはちんぷんかんぷんです。 またこちらにお世話になることがあるかもしれませんが、そのときはまたよろしくお願いします。

その他の回答 (2)

回答No.2

じゃんじゃん投げずに、コマンドを投げたら応答を待つプロトコルにすればいいのではないでしょうか。 そうすればじゃんじゃん応答が返ってくることもなくなって、順番も保証されます。 通常はACKが一定時間届かなければタイムアウトするとか、再送するとかの処理が必要になります。

yukki-111
質問者

お礼

書込みありがとうございます。 うーん私はなにやら根本的に勘違いしていたのかも…。 今回ネットワークプログラミングに初めて触れたのですが、TCP→正確だけど遅い、UDP→不正確だけど早い、ということから、UDPはどんどん投げなければいけないものだと思っていました。(だから早いのかなぁ、って思って) 言われてみればコマンドを投げてから応答を待てば順番は崩れないですよね。 それじゃTCPとUDPの違いって??? コネクションをはるかはらないかの違いでしかないんですか?(なんかアホっぽい質問でスミマセン)

yukki-111
質問者

補足

度々失礼します。 もしよければ再度教えていただきたいのですが、コマンドの結果が取得できなければそれはそれでいい場合、 コマンド送信→3秒待つ→何も返ってこなかった→次のコマンド投げる→3秒待つ→何か返ってきた→ というように続けていけばいいんですよね? ↑のようだと実際のところTCPより早かったりするわけ?なんて思ってしまうのですが…。

回答No.1

それがUDPなのです。 よってUDPで通信する場合、すべて自分で通信規格(プロトコル)を決めてコーティングしないといけません。

yukki-111
質問者

お礼

書込み、ありがとうございました。 UDPとは自由度の高い通信方法、ということなのでしょうか…。