VB2005⇒VB6.0にソケット通信するには?

解決


D・鷹  2008-02-25 05:13:49  No: 139043

現在テスト的にVB2005(クライアント)⇒VB6.0(サーバ)のソケット通信が出来るか勉強しています。

クライアントからサーバへバイナリーデータを送信しているつもりなのですが、バイナリーデータが上手く受信してくれません。

以下に書いてあるコードを省略して張ります。
VB6.0  (Winsock使用)

Private Sub Winsock_ConnectionRequest(ByVal requestID As Long)
Winsock1.Accept requestID
End Sub

Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)
Dim strBuf As String
Winsock1.GetData strBuf
Text1.Text = "クライアント「" & strBuf & "」を受信" 
Winsock1.SendData StrConv(strBuf, vbWide)
End Sub

VB2005    Socketクラス使用

Dim bytReceiveBuffer(255) As Byte
Dim bytBuff As Byte()
Dim intDataLength As Integer
Dim strReceivedData As String

bytBuff(0)=1
bytBuff(1)=1
bytBuff(2)=1

objClient = New System.Net.Sockets.TcpClient
    With objClient
    Try
    objClient.Connect("localhost", intPortNo)
    objNetStream = .GetStream
    With objNetStream
         .Write(bytBuff, 0, bytBuff.Length)
          Do
          If .DataAvailable Then
          intDataLength = .Read(bytReceiveBuffer, 0, bytReceiveBuffer.Length)
          strReceivedData &= System.Text.Encoding.Default.GetString(bytReceiveBuffer).Substring(0, intDataLength)
          ElseIf Not strReceivedData Is Nothing Then
          TextBox2.Text = "サーバから「" & strReceivedData & " 」を受信"
   Exit Do
End If
Loop
End With
Catch Ex As Exception
MsgBox(Ex.Message)
End Try
.Close()
End With

この時、送信されるところまでデータが装着されていることは確認できているのですが、VBではサイズのみが送られ、内部データが送られていません。
StrbufをString『…』という結果
StrbufをByte配列  (0,0,0)
という結果になりました。私の不出来な頭ではこれ以上進めそうにありません。

どこがおかしいのか教えていただければ幸いです。
どうかよろしくお願いいたします。


D・鷹  2008-02-25 05:20:01  No: 139044

申し訳ございません。醜かったのでVB2005のTry以下を直しました。

Try
    objClient.Connect("localhost", intPortNo)
    objNetStream = .GetStream
    With objNetStream
     .Write(bytBuff, 0, bytBuff.Length)
     Do
      If .DataAvailable Then
      intDataLength = .Read(bytReceiveBuffer,0,bytReceiveBuffer.Length)
          strReceivedData &= System.Text.Encoding.Default.GetString(bytReceiveBuffer).Substring(0, intDataLength)
      ElseIf Not strReceivedData Is Nothing Then
       TextBox2.Text = "サーバから「" & strReceivedData & " 」を受信"
       Exit Do
      End If
     Loop
End Try

どうかよろしくお願いいたします。


Hongliang  2008-02-25 06:28:50  No: 139045

ほとんどコードは見てませんが、とりあえず bytBuff  とやらに &H01 が3つ入ってるだけなら、そりゃ文字列にしたくてもできないんじゃ…


D・鷹  2008-02-26 06:37:52  No: 139046

間違えは二つありました。
Byte配列を難しく考えすぎ、StrBuf=Byte配列の値を返すということを失念してました。

もう一つの間違いはVB6のSendData
これはどう考えてもおかしなものをつけてましたね。
お騒がせして申し訳ありませんでした。
同時に事故解決して申し訳ございません。


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

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






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