Imports System.Net.Sockets
Imports System.Text
Namespace UTSModule.Service
Public Class AutsTcpClient
Implements IDisposable
Private _tcpClient As TcpClient
Private _tcpOpen As Boolean
Private ReadOnly _hostName As String
Private ReadOnly _hostPort As Integer
Sub New(hostName As String, port As Integer)
_hostName = hostName
_hostPort = port
_tcpOpen = False
End Sub
Public ReadOnly Property IsOpen() As Boolean
Get
Return _tcpOpen
End Get
End Property
Public Sub Open()
If _tcpOpen = True Then Return
_tcpClient = New TcpClient(_hostName, _hostPort)
_tcpOpen = True
End Sub
Public Sub Close()
If _tcpOpen = False Then Return
_tcpClient.Close()
_tcpClient.Dispose()
_tcpOpen = False
End Sub
'''
''' 网络发送Json字符串,字符串以回车换行结尾
'''
'''
Public Sub WriteJsonString(jsonString As String)
Dim buf() As Byte = Encoding.UTF8.GetBytes(jsonString)
_tcpClient.GetStream().Write(buf, 0, buf.Length)
End Sub
'''
''' 超时接收回复信息,以回车换行结尾
'''
''' 超时时间,单位毫秒
''' 接收到的字符串,超时返回空字符串
Public Function ReadJsonString(Optional timeout As Integer = 1000) As String
Dim replayStr As New StringBuilder
Dim time As Date = Now
While (Now - time).TotalMilliseconds < timeout
If _tcpClient.Available > 0 Then
Dim length As Integer = _tcpClient.Available
Dim buf(length - 1) As Byte
_tcpClient.GetStream().Read(buf, 0, length) '读取数据
replayStr.Append(Encoding.UTF8.GetString(buf))
If replayStr.ToString().EndsWith(vbCrLf) Then '校验,以回车换行结尾
Exit While
End If
End If
End While
Return replayStr.ToString()
End Function
Public Function Connected() As Boolean
If _tcpClient Is Nothing Then Return False
If _tcpClient.Client Is Nothing Then Return False
Return _tcpClient.Connected
End Function
Public Sub Dispose() Implements IDisposable.Dispose
If IsOpen() Then
Close()
End If
End Sub
End Class
End Namespace