Текстовое взаимодействие между приложениями с TCP-сокетами в VB.Net - PullRequest
1 голос
/ 09 октября 2011

У меня проблема с тем, чтобы сделать два приложения для отправки текстовых данных между собой.Сообщение передается без проблем, ответ тоже получен.Но в конце строки, отправляемой / получаемой с каждой стороны, есть много символов «Новая строка».Я думаю, это из-за того, что я читаю полный буфер;Я пытался удалить все Chr (10) и Chr (13);Я также попытался обрезать строку, но это не сработало.

Вот код, который я использую:

Клиентская сторона:

Dim cl As New TcpClient
cl.Connect("127.0.0.1", 2000)
Dim str As NetworkStream = cl.GetStream
Dim HelloInBytes As Byte() = Encoding.UTF8.GetBytes("Hello")
str.Write(HelloInBytes, 0, HelloInBytes.Length)
Dim Buffer(cl.ReceiveBufferSize) As Byte
str.Read(Buffer, 0, cl.ReceiveBufferSize)
Console.WriteLine(Encoding.UTF8.GetChars(Buffer))

Серверная сторона:

Dim srv As New TcpListener(IPAddress.Any, 2000)
srv.Start()
Dim cl As TcpClient = srv.AcceptTcpClient
Dim str As NetworkStream = cl.GetStream
Dim buf(cl.ReceiveBufferSize) As Byte
str.Read(buf, 0, cl.ReceiveBufferSize)
Dim res As Byte() = Encoding.UTF8.GetBytes("World")
str.Write(res, 0, res.Length)

Есть ли способ "очистить" полученную строку?

Спасибо за помощь.

РЕДАКТИРОВАТЬ: Решение: Работает с решением Harzcle.Я нашел другое решение, которое заключается в использовании этой функции в полученной строке:

Public Function CleanString(ByRef Str As String)
    Return Str.Replace(Encoding.UTF8.GetChars({0, 0, 0, 0}), Nothing)
End Function

UTF8 работает на 4 байтах, и когда я читаю поток и помещаю его в буфер, если нет символа,4 байта остаются на значении 0.

Ответы [ 2 ]

1 голос
/ 09 октября 2011

Используйте Flush () после записи в буфер

str.Write(HelloInBytes, 0, HelloInBytes.Length)
str.Flush()

И

str.Write(res, 0, res.Length)
str.Flush()

Изменить:

Вы можете использовать разделитель или что-токак это.

Клиентская сторона:

Dim delimiterChar as Char = "|"
Dim out As Byte() = System.Text.Encoding.UTF8.GetBytes(txtOut.Text + delimiterChar)
server.Write(outStream, 0, outStream.Length)
server.Flush()

И серверная сторона:

Dim delimiterChar as Char = "|"
Dim Stream As NetworkStream = clientSocket.GetStream()
Stream.Read(bytesFrom, 0, CInt(client.ReceiveBufferSize))
Dim data As String = System.Text.Encoding.UTF8.GetString(bytesFrom)
data = data.Substring(0, data.IndexOf(delimiterChar)) 'From 0 to delimiter
0 голосов
/ 13 июля 2013

Это удалит все нулевые символы в конце полученной строки

client_content = client_content.Replace(Chr(0), Nothing)

Чтобы удалить новые строки:

client_content = client_content.Replace(vbLf, Nothing)

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