VBで、WinSockコントロールを使ってPC間のTCP/IP通信をしているのですが
相手から大きいサイズのデータが1回送信された場合
こちらでDataArrivalイベントが何度も発生してしまい、困っています。
相手からの1回の送信につき、1回だけDataArrivalイベントを発生させる方法はありますでしょうか?
もしそれが無理だった場合、自分で複数の受信データを結合させようと思っているのですが、その際、どこからどこまでが1回分のひとまとまりのデータなのかを判定する方法がありますでしょうか?
もし分かる方がいましたら教えてください。
よろしくお願いいたします。
※WinSockのTCPですよね?
> 相手からの1回の送信につき、1回だけDataArrivalイベントを発生させる方法はありますでしょうか?
無いです。
> もしそれが無理だった場合、自分で複数の受信データを結合させようと思っているのですが、その際、どこからどこまでが1回分のひとまとまりのデータなのかを判定する方法がありますでしょうか?
ないです。
・マーカで終端を表す/最初にサイズを送信して、受信側でそのサイズ分だけ結合する
というのが、私が考えたものです。
('A`) …早とちりしてた(TT
スレ主さんスミマセン(orz
>('A`) …早とちりしてた(TT
>スレ主さんスミマセン(orz
早とちりではないと思いますが・・・
> 相手からの1回の送信につき、1回だけDataArrivalイベントを発生させる方法はありますでしょうか?
同様に無いと思います。これはTCP/IPの特性で、トラフィック等の影響により、
1回のDataArrivalイベントにて取得出来るデータ量も一定ではありません。
故に、
1MSG⇒DataArrivalイベント*n回
であれば、ガッさんのいう
>・マーカで終端を表す/最初にサイズを送信
で終端を示す文字列等またはデータサイズ分取得するまで待ち、取得出来たらデータを結合する。
という処理を作り込む必要があります。
また、
n(n>1)MSG⇒DataArrivalイベント*1となってしまうケースもあります。
この場合も同様に、データサイズ等よりデータを分割する。
という処理が必要となります。(送信側でSendDataするタイミングによりますが。)
>もしそれが無理だった場合、自分で複数の受信データを結合させようと思っているのですが、その際、どこからどこまでが1回分のひとまとまりのデータなのかを判定する方法がありますでしょうか?
送られてくるデータの仕様が分からないとなんともいえないですね。
通信の仕様を変更できるんだったら、ガッさんやコボルさんのいうやり方でできますよ。
アプリケーションレベルのプロトコルを作って
制御してみたらいいとおもいます。
ツイート | ![]() |