Отправить простой текст через сокеты в .NET - PullRequest
0 голосов
/ 09 сентября 2011

Я пишу замену старой библиотеки, которую мы используем в офисе для связи с довольно неуклюжей и старой нестандартной платформой C ++, которая принимает запросы через сокеты для связи с кучей других систем.Проблема в том, что он будет принимать только текстовые сообщения, содержащие строку, которая должна быть отформатирована очень специфическим способом.

Проблема, с которой я сталкиваюсь, заключается в том, что я до сих пор не нашел способ отправки простого текста.текст через сокет.Метод Send сокета будет принимать только байтовые массивы, и пока точка прослушивания получает данные, она оказывается там полностью зашифрованной, и я никак не могу связываться с этим, чтобы преобразовать массив байтов обратно в обычный текст.Мне нужно иметь возможность отправлять обычный текст, а не байтовые массивы.

Это метод Connect и способ отправки, который у меня есть:

    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

Любая помощь будет оценена!

1 Ответ

2 голосов
/ 12 сентября 2011

Вы действительно уверены, что должны использовать Unicode? Так как это старое приложение C ++, я уверен, что кодировка должна быть старой Encoding.ASCII или кодировкой типа iso-8559-1.

При использовании сокетов «отправить как обычный текст» не существует. Это всегда байтовые потоки, которые используются. Старое приложение просто интерпретирует полученные байты как строки, используя определенную кодировку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...