Vb.net Socket通讯 如何接收服务器返回的数据,谢谢
大家好,socket通讯,我通过如下代码向服务器发出请求,请问我如何接收服务器返回的数据?
谢谢!
'发送信息
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click
'客户端Socket
Dim clientSocket1 As Socket
Dim remoteServer1 As New IPEndPoint(Net.IPAddress.Parse(Me.txtIP.Text), Me.txtPort.Text)
clientSocket1 = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
clientSocket1.Connect(remoteServer1)
Dim strAddress As String : strAddress = Microsoft.VisualBasic.Right("0000" + CStr(Hex(Val(Me.txtAddress.Text))), 4) '通讯地址必须是四位,不足四位,前面补零
Dim strLength As String : strLength = Microsoft.VisualBasic.Right("0000" + CStr(Hex(Val(Me.txtLength.Text))), 4) '*元件通讯地址必须是四位,所以用取右侧四位的方式,不足四位,前面补零
Dim SenDataR() As Byte : ReDim SenDataR(0 To 11)
SenDataR(0) = &H0 '通讯编号高位,任意
SenDataR(1) = &H0 '通讯编号低位,任意
SenDataR(2) = &H0 '协议标识符,00=MODBUS
SenDataR(3) = &H0 '协议标识符,00=MODBUS
SenDataR(4) = &H0 '数据长度高位
SenDataR(5) = &H6 '数据长度低位
SenDataR(6) = Val("&H" + Me.txtSlaveID.Text) '站号
SenDataR(7) = Val("&H" + Me.cboFunction.SelectedItem.ToString.Split(" ")(0)) '命令
SenDataR(8) = Val("&H" + Microsoft.VisualBasic.Mid(strAddress, 1, 2)) '寄存器通讯地址高位
SenDataR(9) = Val("&H" + Microsoft.VisualBasic.Right(strAddress, 2)) '寄存器通讯地址低位
SenDataR(10) = Val("&H" + Microsoft.VisualBasic.Mid(strLength, 1, 2)) '读取个数高位
SenDataR(11) = Val("&H" + Microsoft.VisualBasic.Right(strLength, 2)) '读取个数低位
clientSocket1.Send(SenDataR) '*发送
End Sub
[解决办法]
socket有接收事件,从里面的流中读取
[解决办法]
开个线程
RealTimeSock = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
Dim LocalIPAddress As Net.IPAddress = Dns.GetHostEntry(Dns.GetHostName).AddressList.GetValue(0)
Dim LocalIPEndPoint As New IPEndPoint(LocalIPAddress, ICON_UpdateCmr_Port)
RealTimeSock.Bind(LocalIPEndPoint)
RealTimeSock.Listen(1)
while
Dim RealTime_Sock As Socket
RealTime_Sock = RealTimeSock.Accept()
RealTime_Sock.ReceiveBufferSize = 10000000
Dim PhotoInfo() As Byte
While RealTime_Sock.Available < 38 And ICON_G_Tsk_flg = True
Thread.Sleep(1)
End While
Dim FirstLen As Long = RealTime_Sock.Available()
end while
给你一部分 还有的自己想