关于以太网通讯的一个问题 求助达人
我用pc和下位机装置通讯 因为下位机已经规定了其通信协议格式 我用下面方法定义
dim sendstr1(10) as byte
sendstr1(0)=XX
.
.
.
sendstr1(9)
然后连成字符串发送 发送应该是没有问题的 不知道如何显示接收数据
在VB6.0中 很容易通过text显示返回数据的 但是在.net 不知道怎么去做 求助达人帮助 我要通过返回的数据来做监控显示的
[解决办法]
转换byte()为字符串,如下例:
Dim str1 As String = System.Text.Encoding.ASCII.GetString(sendstr1, 0, 9)
[解决办法]
不知道你是不是用MSComm控件的,MSComm控件分事件驱动方式和查询方式两种方式,发完后用一个Sleep后可以通过MsComm1.Input获得下位机返回的数据,使用msComm1_OnComm事件是驱动方式。建议用事件驱动方式来做处理
[解决办法]
得到容易,不过表示麻烦,示例:
Public Class Socket ''' <summary> ''' 监听指定端口 ''' </summary> ''' <remarks> ''' </remarks> Public Class Listen Private localAddr As IPAddress Private Listenport As Integer Private a As New System.Threading.Thread(AddressOf Listening) Private listener As System.Net.Sockets.TcpListener ''' <summary> ''' 创建监听 ''' </summary> ''' <param name="Intport">监听端口</param> ''' <param name="strLocalIPAddress">本机IP,不指定为自动获取</param> ''' <remarks></remarks> Sub New(ByVal Intport As Integer, Optional ByVal strLocalIPAddress As String = "") If strLocalIPAddress <> "" Then localAddr = IPAddress.Parse(strLocalIPAddress) Else localAddr = IPAddress.Parse(GetMyIPAddress()) End If Listenport = Intport End Sub ''' <summary> ''' 启动监听 ''' </summary> ''' <remarks></remarks> Public Sub StartListen() If Not a.IsAlive Then a.Start() End Sub ''' <summary> ''' 终止监听 ''' </summary> ''' <remarks></remarks> Public Sub CloseCon() If a.IsAlive Then a.Abort() listener.Stop() End If End Sub ''' <summary> ''' 监听状态 ''' </summary> ''' <value></value> ''' <returns></returns> ''' <remarks></remarks> Public ReadOnly Property ConState() As Boolean Get Return a.IsAlive End Get End Property Private Sub Listening() listener = New System.Net.Sockets.TcpListener(localAddr, Listenport) listener.Start() Dim bytes(1024) As Byte Dim data As String = Nothing While True ' Perform a blocking call to accept requests. ' You could also user server.AcceptSocket() here. Dim client As TcpClient = listener.AcceptTcpClient() data = Nothing ' Get a stream object for reading and writing Dim stream As NetworkStream = client.GetStream() Dim i As Int32 ' Loop to receive all the data sent by the client. i = stream.Read(bytes, 0, bytes.Length) While (i <> 0) ' Translate data bytes to a ASCII string. data = System.Text.Encoding.Unicode.GetString(bytes, 0, i) 'Console.WriteLine("Received: {0}", data) RaiseEvent Receive(data) i = 0 End While client.Close() End While End Sub Public Event Receive(ByVal strdata As String) End Class
[解决办法]
这个类中还有个发送方法,一并送给你了:
''' <summary> ''' 向指定的IP与端口发送消息 ''' </summary> ''' <remarks></remarks> Class SendMsg Dim ns As NetworkStream Dim clientsocket As TcpClient Private _strRemoteIPAddress As String Private _intRemotePort As Integer ''' <summary> ''' 创建发送过程 ''' </summary> ''' <param name="strRemoteIPAddress">远程IP地址</param> ''' <param name="intRemotePort">远程端口</param> ''' <remarks></remarks> Public Sub New(ByVal strRemoteIPAddress As String, ByVal intRemotePort As Integer) _strRemoteIPAddress = strRemoteIPAddress _intRemotePort = intRemotePort End Sub ''' <summary> ''' 发送消息 ''' </summary> ''' <param name="strMSG">消息内容</param> ''' <remarks></remarks> Public Sub SendMessage(ByVal strMSG As String) clientsocket = New TcpClient(_strRemoteIPAddress, _intRemotePort) ns = clientsocket.GetStream() Dim command As String = strMSG Dim outbytes As Byte() = System.Text.Encoding.Unicode.GetBytes(command.ToCharArray()) ns.Write(outbytes, 0, outbytes.Length) clientsocket.Close() End Sub End Class