首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

关于以太网通讯的一个有关问题 达人

2012-01-09 
关于以太网通讯的一个问题 求助达人我用pc和下位机装置通讯 因为下位机已经规定了其通信协议格式 我用下面

关于以太网通讯的一个问题 求助达人
我用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事件是驱动方式。建议用事件驱动方式来做处理
[解决办法]
得到容易,不过表示麻烦,示例:

VB.NET code
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 


[解决办法]
这个类中还有个发送方法,一并送给你了:

VB.NET code
        ''' <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 

热点排行