winsockでバイナリ送受信

解決


初心者です  2003-07-08 12:53:41  No: 78552

winsockを利用し、データの送受信をしたいのですが
行き詰まっております。

_/_/_/送信側_/_/_/
Dim Size as string
Dim File() as Byte
Open FileName For Binary As #1
  Size = LOF(1)
  ReDim File(Size)
  Get #1, , File()
Close #1

With Winsock1
  .SendData File()
End With

_/_/_/受信側_/_/_/
Winsock1.GetData strReceiveData, vbString, bytesTotal
Open FileName For Binary As #1
  Put #1, , strReceiveData
Clise #1

この状態でstrReceiveDataをバイナリモードで保存しても
数バイトのデータしが保存できません。
受信側も配列で受け取らないといけないのでしょうか?

宜しくお願いします。


Loreley  2003-07-08 17:48:45  No: 78553

以前ここのHPで似たような質問があった気がしますが、

問題は受信側がいつ、どのタイミングで受信しているかです。

Winsock1_DataArrival は、データが来たらすぐに呼ばれます。

データが「すべて」きたら。ではありません。

たとえば、"abcdefghijklmn"というデータを送った場合、
"a"が届いたら、「データがきた」となります。
で、Winsock1_DataArrival が呼ばれて、
Winsock1.GetData strReceiveData, vbString, bytesTotal
の行までいくまでに、
"bc"が到着してたりします。
(ということはstrRecieveDataには"abc"がはいっています)
で、ファイルを開けて
「先頭から(Put #1, ,)」「"abc"を(strRecieveData)」書き込みます。
で、ファイルを閉じます。

同様に次に
strRecieveDataに"def"がはいって、
「先頭から(Put #1, ,)」「"def"を(strRecieveData)」書き込みます。

というようなことを繰り返して
最終的には、
mnlというのがファイルに残るというわけです。

前回はバッファについても書いた気がしますが、
それは掲示板の検索でそちらを見てください。

で、端的に言えば、
データが来るたびにファイルを閉じてるのと、
書き込むたびに先頭から書いているのが、
直接的な問題だと思います。


Loreley  2003-07-08 18:08:07  No: 78554

ここのもう一方の掲示板でした<前にあった質問


初心者  2003-07-09 16:04:08  No: 78555

ご返事有難う御座います。

分割されてしまうのですね。
その方向で考え治します。

有難う御座いました。


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

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






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