我正在为我们在办公室使用的旧库编写一个替代品来与一个相当笨拙且旧的定制C ++框架进行通信,该框架通过套接字接收请求以便与许多其他系统进行通信。问题是它只会包含一个包含字符串的纯文本消息,该字符串必须以非常具体的方式格式化。
我面临的问题是到目前为止我还没有找到通过套接字发送纯文本的方法。套接字的Send方法只接受字节数组,并且当监听点接收数据时,它会完全加扰,并且我无法将其弄乱,以便将字节数组转换回纯文本。我需要能够发送纯文本,而不是字节数组。
这是我到目前为止的Connect和Send方法:
Public Sub Connect(Optional ByVal pHostName As String = "", Optional ByVal pPort As Integer = 0)
If pHostName.Trim <> "" Then mHostName = pHostName
If pPort > 0 Then mPort = pPort
Try
Dim ipep As IPEndPoint
If IsIPAddress(mHostName) Then
ipep = New IPEndPoint(IPAddress.Parse(mHostName), mPort)
Else
ipep = New IPEndPoint(IPAddress.Parse(Dns.GetHostEntry(mHostName).AddressList(0).ToString), mPort)
End If
mSocket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
mSocket.Connect(CType(ipep, EndPoint))
mState = eState.Connected
RaiseEvent Connected()
mDataTimer.Start()
Catch ex As Exception
Me.Close()
Throw ex
End Try
End Sub
Public Sub SendData(ByVal pBytes() As Byte)
mSocket.Send(pBytes)
End Sub
Public Sub SendString(ByVal pString As String)
Dim bytes() As Byte = System.Text.Encoding.UTF8.GetBytes(pString)
mSocket.Send(bytes)
End Sub
任何帮助将不胜感激!
答案 0 :(得分:2)
你真的确定你应该使用unicode吗?由于它是一个旧的C ++应用程序,我敢打赌编码应该是普通的Encoding.ASCII
或像iso-8559-1
这样的字符集。
使用套接字时没有“以纯文本格式发送”。它始终是正在使用的字节流。旧的应用程序只是使用特定的编码将接收的字节解释为字符串。