こちらの掲示板の過去ログを拝見して、Winsockを使用してファイルを送受信するコードを書いてみたのですが、
Dim sd() As Byte
Dim fn As Integer
fn = FreeFile()
Open "C:\a.mp3" For Binary Access Read As fn
ReDim sd(0 To LOF(fn) - 1)
Get fn, , sd()
Close fn
Winsock.SendData sd()
送信部分はこんな感じになりました。
受信部分は、どのようにすればいいのでしょうか?
Putを使ったりしてみたのですが、どうもうまくいかなくて・・・。
よろしくお願いします。
>送信部分はこんな感じになりました。
TCPで送信したいのでしょうか、それともUDP?
ソースの記述を端折っているのだと思いますが、それでは送信できません。
>Putを使ったりしてみたのですが、どうもうまくいかなくて・・・。
どういう意味でしょうか?
受信はできているけどファイルにうまく書き出せないということでしょうか?
MSDNでWinsockコントロールの使い方という項目があります。
そこにサーバー側、クライアント側ともにサンプルコードがありますので
参照してみてください。
レスどうもです。
プロトコルはTCPです。TCPでのテキストのやり取り(要するにチャット)はうまくいきます。
おっしゃる通り、受信はできているが、ファイルにうまく書き出せない、ということです。
ファイルは生成されるのですが、ファイルの末端部64KBしか書き出せません・・・。
'受信部
Dim gd() As Byte
WS.GetData gd()
fn = FreeFile()
Open "D:\a.mp3" For Binary Access Write As fn
Print fn, gd()
Close fn
なんとなく分かりました。
受信イベント時にそのつどファイルをバイナリモードでオープンして
書き足しているわけですね。
バイナリモードでファイルを開いた場合書き込み位置は常にファイルの先頭にあります。
つまり、ファイルをオープンした後、ファイル書き込み位置をファイルの
最後まで移動させてやる必要があります。
LOF関数やSeekステートメントを調べて見てください。
ちなみにPutでいけますよ。
編集 削除さらに蛇足ですが
ConnectionRequestイベントでファイルをオープンして、Closeイベント
またはErrorイベントでファイルを閉じてやれば上記のような処理はいら
ないと思います。
レスどうもです。
ご指摘の通り色々調べてみて、Openステートメントの下に
Seek fn, LOF(fn) + 1
を追加してやることで、何なくファイル受信できるようになりました。
ありがとうございました。