none
Socket.Receive RRS feed

  • 質問

  • Socket.Receiveを使用してTCPIPの電文送受信を行っています。
    受信データをReceiveで受けた際、受信データが途中で切れてしまう事象は
    起こり得るのでしょうか?

    【例】
    送信時のデータ ⇒ aaabbbccc    [9byte]
    <1回目の受信>
    受信時のデータ ⇒ aaab   [4byte]
    <2回目の受信>
    受信時のデータ ⇒ bbccc   [5byte]

    ご存知の方がいらっしゃいましたら、お教え願います。
    宜しくお願い致します。

    2006年6月29日 9:58

すべての返信

  • そりゃ普通にあるでしょう。

    2006年6月29日 10:55
  • なので、9バイト揃うまでスプールします。
    2006年6月30日 6:13
  • 失礼ですが割り込ませていただきます。

    取得ミスはありえるのでしょうか?
    たとえば
    3個の1100バイトのデータがありMTU1500バイトのネットワークで送信したところ
    (ネットワークヘッダは無視します)
    1回目…1100バイト+400バイト
    2回目…700バイト+800バイト
    3回目…300バイト
    これをrecvで取得したとき1回目の1100バイトはOKだったが次のrecvで
    1回目ののこり400バイトは無視して2回目の700バイト以降を取得すること
    はありうるのでしょうか?
    2006年10月13日 17:02
  • そういうことが無いようにしてくれるのがTCPです。
    2006年10月13日 18:27
  • selectで問い合わせをしてrecvしているのですが、この現象が発生してしまいます。
    TCPヘッダのPUSHフラグが立った受信データのみ受け取られているようで、その前に
    バッファリングされているはずのPUSHフラグがZEROのデータが受け取れないのです。
    クライアント側はルータ-スイッチ-PC(WindowsXP)という構成です。
    しかし、なぜかキャプチャソフトを2つ起動すると現象は発生しません。(ひとつでは発生)また同一LAN上では発生しません。
    スイッチ-PC間では通信速度が早過ぎるからか?それともポインタがずれてしまうのか?
    どなたかご助言をお願いします。


    2006年10月16日 15:54