- ベストアンサー
ソケットをTPC接続して送信する場合、必ず送信した順で相手に届きますか?
このたびネットワークのプログラムを組んでいるのですが、TCPを使用しています。 TCPはデータが正しく届くと聞いているのですが、送信した順番も正しく受信側に反映されるのでしょうか・・・ たとえば send("a") send("b") send("c") のようにやった場合、必ず相手側には"a","b","c"の順で届くのでしょうか… ちゃんと届かないなら順番を調べて並び替える処理を書かなくてはいけませんし、そうでないならとても楽なのですがどちらか分からなくて困っています。 分かる方がいらっしゃいましたらどなたか教えていただけないでしょうか… どうぞよろしくお願いいたします。
- みんなの回答 (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の場合は順番どおりとは限りません。
その他の回答 (1)
- Zozomu
- ベストアンサー率22% (123/545)
順番通りに届くはずです。 send("a") send("b") send("c") と送信して 受信側に"a","c"と届いたと言う事は、 "b"のSENDでエラーが発生したと判断してよいでしょう。 sendの後にエラーチェックとエラー処理をしっかり入れておけば、 送信したとおりに受信させる事はちゃんとできるはずです。
お礼
sendでエラーが発生することもあるんですね^^; わかりました、ありがとうございました。
お礼
分かりやすい回答ありがとうございました。 順番に届くということですので、安心してプログラムが組めます^^ 本当にありがとうございましたm(_ _)m