• ベストアンサー

ソケットをTPC接続して送信する場合、必ず送信した順で相手に届きますか?

このたびネットワークのプログラムを組んでいるのですが、TCPを使用しています。 TCPはデータが正しく届くと聞いているのですが、送信した順番も正しく受信側に反映されるのでしょうか・・・ たとえば send("a") send("b") send("c") のようにやった場合、必ず相手側には"a","b","c"の順で届くのでしょうか… ちゃんと届かないなら順番を調べて並び替える処理を書かなくてはいけませんし、そうでないならとても楽なのですがどちらか分からなくて困っています。 分かる方がいらっしゃいましたらどなたか教えていただけないでしょうか… どうぞよろしくお願いいたします。

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

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.2

TCPはコネクション型といわれるものです。 "a","b","c"と送って実際のネットワーク上で"b"より"c"が先に来る事はあります。 (スライディングウインドウという方式の為) ただしTCPのパケットにはシーケンス番号が含まれているため recvでは"a"の後"c"がくることはありません。 ("c"はとっておいて"b"が来るのを待っています。) またデータが欠損した時点でエラーが発生するので "a","b","c"と順番に届きます。 http://www.wakasato.org/learn/nepc/course2/chapter04/section01.html http://www.azure-stone.net/basic/tcp-and-udp.html ※UDPの場合は順番どおりとは限りません。

genki140
質問者

お礼

分かりやすい回答ありがとうございました。 順番に届くということですので、安心してプログラムが組めます^^ 本当にありがとうございましたm(_ _)m

その他の回答 (1)

  • Zozomu
  • ベストアンサー率22% (123/545)
回答No.1

順番通りに届くはずです。 send("a") send("b") send("c") と送信して 受信側に"a","c"と届いたと言う事は、 "b"のSENDでエラーが発生したと判断してよいでしょう。 sendの後にエラーチェックとエラー処理をしっかり入れておけば、 送信したとおりに受信させる事はちゃんとできるはずです。

genki140
質問者

お礼

sendでエラーが発生することもあるんですね^^; わかりました、ありがとうございました。

関連するQ&A