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をバイナリモードで保存しても
数バイトのデータしが保存できません。
受信側も配列で受け取らないといけないのでしょうか?
宜しくお願いします。
以前ここの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というのがファイルに残るというわけです。
前回はバッファについても書いた気がしますが、
それは掲示板の検索でそちらを見てください。
で、端的に言えば、
データが来るたびにファイルを閉じてるのと、
書き込むたびに先頭から書いているのが、
直接的な問題だと思います。
ここのもう一方の掲示板でした<前にあった質問
ご返事有難う御座います。
分割されてしまうのですね。
その方向で考え治します。
有難う御座いました。
ツイート | ![]() |