DataArrivalイベントを発生させるには


pi  2006-01-14 01:38:10  No: 93613

VBで、WinSockコントロールを使ってPC間のTCP/IP通信をしているのですが
相手から大きいサイズのデータが1回送信された場合
こちらでDataArrivalイベントが何度も発生してしまい、困っています。

相手からの1回の送信につき、1回だけDataArrivalイベントを発生させる方法はありますでしょうか?

もしそれが無理だった場合、自分で複数の受信データを結合させようと思っているのですが、その際、どこからどこまでが1回分のひとまとまりのデータなのかを判定する方法がありますでしょうか?

もし分かる方がいましたら教えてください。
よろしくお願いいたします。


ガッ  2006-01-14 01:50:59  No: 93614

※WinSockのTCPですよね?

> 相手からの1回の送信につき、1回だけDataArrivalイベントを発生させる方法はありますでしょうか?
無いです。

> もしそれが無理だった場合、自分で複数の受信データを結合させようと思っているのですが、その際、どこからどこまでが1回分のひとまとまりのデータなのかを判定する方法がありますでしょうか?
ないです。
・マーカで終端を表す/最初にサイズを送信して、受信側でそのサイズ分だけ結合する
というのが、私が考えたものです。


ガッ  2006-01-14 01:51:23  No: 93615

('A`)  …早とちりしてた(TT
スレ主さんスミマセン(orz


コボル  2006-01-14 10:41:15  No: 93616

>('A`)  …早とちりしてた(TT
>スレ主さんスミマセン(orz
早とちりではないと思いますが・・・

> 相手からの1回の送信につき、1回だけDataArrivalイベントを発生させる方法はありますでしょうか?
同様に無いと思います。これはTCP/IPの特性で、トラフィック等の影響により、
1回のDataArrivalイベントにて取得出来るデータ量も一定ではありません。
故に、
1MSG⇒DataArrivalイベント*n回
であれば、ガッさんのいう
>・マーカで終端を表す/最初にサイズを送信
で終端を示す文字列等またはデータサイズ分取得するまで待ち、取得出来たらデータを結合する。
という処理を作り込む必要があります。
また、
n(n>1)MSG⇒DataArrivalイベント*1となってしまうケースもあります。
この場合も同様に、データサイズ等よりデータを分割する。
という処理が必要となります。(送信側でSendDataするタイミングによりますが。)


0123  2006-01-14 19:29:28  No: 93617

>もしそれが無理だった場合、自分で複数の受信データを結合させようと思っているのですが、その際、どこからどこまでが1回分のひとまとまりのデータなのかを判定する方法がありますでしょうか?
送られてくるデータの仕様が分からないとなんともいえないですね。
通信の仕様を変更できるんだったら、ガッさんやコボルさんのいうやり方でできますよ。


ヤマ@文系  2006-01-16 14:29:24  No: 93618

アプリケーションレベルのプロトコルを作って
制御してみたらいいとおもいます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加