VB6(SP6):WinXP
Winsock(V.2)コントロールで受信データをバイト配列に読出したいのですが下記ではうまくいきませんでした。(1バイト毎に読み出してループさせればできました)
引数の指定などで問題があるのでしょうか?
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim byteData(1500) As Byte
Winsock1.GetData byteData(), vbArray + vbByte, bytesTotal
End Sub
ご指南お願いいたします。
ReDim で配列サイズを再指定することでできるようになりました。
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim byteData(1500) As Byte
ReDim byteData(bytesTotal) '追加
Winsock1.GetData byteData(), vbArray + vbByte, bytesTotal
End Sub
ただ理由が理解できていないので、解説していただけるとありがたいです。
※過去ログにも色々書いてあると思うので、そちらも参考にしてください
とりあえず、私は次のようなモデルでTCPを扱っています
・前提
・TCPはストリームである
・要求
・TCPで送受信されるものを、ストリームとして扱いたい
・環境
・VB6
・必要そうなもの
・ストリームを扱えるクラス(ExampleStream)
・API
・WriteBytes(Byte())
・Read<type>() As <type>
・Winsockコントロール(またはTCPソケットを使う何か)
・実装
private RStr as new ExampleStream
private sub Winsock1_DataArrival(byval bytestotal as long)
'受信ストリームにすべて書き込む
dim buf() as byte
Winsock1.getdata buf,vbarray + vbbyte
call RStr.writebytes(buf)
'受信したデータを解析する
call hoge()
end sub
private sub hoge()
'RStrを解析する
end sub
以上のような実装を行うことで、TCPストリームを簡単に扱えるようになります。
-*-*-*-*-*-*-*-*-*-*-
ところで、
> Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
> Dim byteData(1500) As Byte
>
> ReDim byteData(bytesTotal) '追加
> Winsock1.GetData byteData(), vbArray + vbByte, bytesTotal
>
> End Sub
これ、コンパイルできないのですが…なんだかもうダメダメっぽいですよ?
ありがとうございます。
> Dim byteData(1500) As Byte
↑が
Dim byteData() As Byte
の記載ミスでした。すみません。
ツイート | ![]() |