TCP-клиент не получает данные должным образом VB.NET - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь создать простое приложение на стороне клиента, чтобы получать небольшие текстовые данные, сравнивать их и затем что-то делать на клиентском компьютере в зависимости от того, какой сервер отправлен.

Логика сервера : Серверная часть сделана в Java, поэтому ничего не могу изменить там.Сервер отправляет строку «abc001» при подключении к клиенту.

Клиентская логика : клиент получает строку «abc001» с сервера и проверяет, совпадает ли полученная строка с «abc001», затемделает что-то соответственно.

Проблема : Когда клиент получает данные, я отображаю их в msgbox.Но вместо просто «abc001» появляется дополнительное пустое сообщение (изображение включено).

Код клиента - при запуске :

    Try
        ' declare vals
        Dim ip As String = "127.0.0.1"
        Dim port As Integer = 5000

        ' set client
        _client = New TcpClient(ip, port)

        ' disable cross thread calls checking
        CheckForIllegalCrossThreadCalls = False

        ' recieve msg
        Threading.ThreadPool.QueueUserWorkItem(AddressOf RecieveMessages)
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try

Код клиента - получение данных

Private Sub RecieveMessages(state As Object)
        Try
            While True
                Dim ns As NetworkStream = _client.GetStream()
                Dim toRecieve(_client.ReceiveBufferSize) As Byte
                ns.Read(toRecieve, 0, CInt(_client.ReceiveBufferSize))
                Dim txt As String = Encoding.ASCII.GetString(toRecieve)
                MsgBox(txt)
            End While
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub

MsgBox 1 String Recieved

MsgBox 2 Blank Popup?

Как не получить пустую панель сообщений.Даже при сравнении полученные данные не соответствуют параметрам.Пытался использовать задержку, пытался установить размер буфера до 6 байт, но безрезультатно. Любая помощь приветствуется.Спасибо.

EDIT 1 : Я старался изо всех сил, чтобы понять это, но не могу .. Попытался очистить возвращенные строковые данные и даже попытался сохранить все возвращаемые данные в массиве.Увидел стек, и он говорит, что в msgbox нет ничего.Это ноль .. Я даже не знаю, что делать .. Вот код для чистых строк:

Private Sub RecieveMessages(state As Object)
        Dim message(0) As String
        Dim command_raw, command_clean, command As String
        Dim counter As Integer = 0
        Try
            While True
                Dim ns As NetworkStream = _client.GetStream()
                Dim toRecieve(_client.ReceiveBufferSize) As Byte
                ns.Read(toRecieve, 0, CInt(_client.ReceiveBufferSize))
                Dim txt As String = Encoding.ASCII.GetString(toRecieve)
                message(0) = txt
                command_raw = message(0)
                command_clean = command_raw.Replace(vbCrLf, Nothing)
                command = command_clean.Substring(0, 6)
                MsgBox(command)
            End While

        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub
...