ws2_32.dllのrecvでバイト配列で受信する方法について

解決


Edotatsu  2012-03-19 21:01:07  No: 103242

VB6でメールの送受信のプログラムを作成しています。
ソケットからws2_32.dllのrecvでデータを受信しようとしていますが、下記のようにすれば文字列としては受信できるのですが、文字列ではなくバイト配列で受信することはできるのでしょうか?

Dim strRecv AS String * 2048
lngRet=recv(MySocket, ByVal strRecv, Len(strRecv), 0)

1回のrecvで受信できないと、何回かに分かれて受信するのですが、文字列で受け取るとたまに途中で文字化けを起こしてしまうのです。
recvでなくてもソケットからバイト配列で受信する方があれば助かります。
よろしくお願いします。


Koz  2012-03-20 07:36:10  No: 103243

API の宣言の第2引数を変更しましょう。

Declare Function recv Lib "wsock32.dll" (ByVal s As Long, buf As Byte, ByVal length As Long, ByVal flags As Long) As Long

こんな感じで使えます。

Dim Buffer(256) As Byte
nRet = recv(nSocket, Buffer(0), 256, 0)

Winsock コントロールでのやりかたは
http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200606/06060018.txt
にあるようです。


Edotatsu  2012-03-21 05:41:35  No: 103244

Kozさん
おかげさまで無事バイト配列で取得することができました。
ありがとうございました。


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

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






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