Winsockコントロールを使用し
ネットワーク間でのバイナリファイルのやり取りをしたいと思っていますが
最初の1バイトのみ受信し、2バイト目以降のデータに関しては
受信しないまま転送が終わってしまいます。
何か問題がござしましたらご指摘お願いいたします
なおWinsockのプロトコルはTCP/IPを使用しています
送信側:
Private Sub send_filedata()
Dim filedata() As Byte
Dim i As Integer
filesize = LOF(2)
For i = 1 To filesize
Get #2, i, filedata
Winsock3.SendData filedata
Next i
Winsock1.SendData "::end::"
Close (2)
End Sub
受信側:
Private Sub Winsock4_DataArrival(ByVal bytesTotal As Long)
Dim filedata As Byte
Dim test As String
Winsock4.GetData filedata, vbByte, bytesTotal
Put #1, 1, filedata
End Sub
Byte配列で取得するとか、データがあるだけ何度もGetDataするとか。
どちらも試したことはありませんが。
>最初の1バイトのみ受信し、2バイト目以降のデータに関しては
>受信しないまま転送が終わってしまいます。
この判定の根拠が
>Put #1, 1, filedata
で記録されたファイルにあるのであればそれかもしれません
Put #1, , filedata
でないと、常にファイルの先頭1バイト目に、
サイズ1バイトのデータ(filedata)を書き込んでいるので
ファイルサイズは常に1バイトとなります。
Winsock4.GetData filedata, vbByte, bytesTotal
ではなくて、
Winsock4.GetData filedata, vbByte
にしたほうが安全だと思います。
bytesTotalにするなら、
nanashiさんがおっしゃっているように、Byte配列で取得し、
またこちらもnanashiさんがおっしゃっていますが
データがまだ残っていないか調べる必要もあると思います
ツイート | ![]() |