現在テスト的に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)
という結果になりました。私の不出来な頭ではこれ以上進めそうにありません。
どこがおかしいのか教えていただければ幸いです。
どうかよろしくお願いいたします。
申し訳ございません。醜かったので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
どうかよろしくお願いいたします。
ほとんどコードは見てませんが、とりあえず bytBuff とやらに &H01 が3つ入ってるだけなら、そりゃ文字列にしたくてもできないんじゃ…
間違えは二つありました。
Byte配列を難しく考えすぎ、StrBuf=Byte配列の値を返すということを失念してました。
もう一つの間違いはVB6のSendData
これはどう考えてもおかしなものをつけてましたね。
お騒がせして申し訳ありませんでした。
同時に事故解決して申し訳ございません。
ツイート | ![]() |