Winsock.GetData でバイト配列に読み込むには

解決


TOMO  2006-06-08 23:35:42  No: 95677

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

ご指南お願いいたします。


TOMO  2006-06-09 20:47:11  No: 95678

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

ただ理由が理解できていないので、解説していただけるとありがたいです。


ガッ  2006-06-09 20:57:04  No: 95679

※過去ログにも色々書いてあると思うので、そちらも参考にしてください

とりあえず、私は次のようなモデルで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
これ、コンパイルできないのですが…なんだかもうダメダメっぽいですよ?


TOMO  2006-06-10 00:50:37  No: 95680

ありがとうございます。
>    Dim byteData(1500) As Byte
↑が
    Dim byteData() As Byte
の記載ミスでした。すみません。


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

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






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