我有一个问题,使两个应用程序之间发送文本数据。
信息传输没有任何问题,答案也收到了。但是,两边的send/received字符串的末尾有很多“新行”字符。
我想这是因为我正在读取完整的缓冲区;我试图删除所有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)

有没有办法“清理”收到的字符串?
谢谢你的帮助。
编辑:解决方案:
它与harzcele解决方案一起工作。
我找到了另一个解决方案,就是对接收到的字符串使用此函数:
Public Function CleanString(ByRef Str As String)
    Return Str.Replace(Encoding.UTF8.GetChars({0, 0, 0, 0}), Nothing)
End Function

utf8在4个字节上工作,当我读取流并将其放入缓冲区时,如果没有char,那么4个字节将保留在0值上。

最佳答案

写入缓冲区后使用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

关于vb.net - VB.Net中TCP套接字的应用程序之间的文本通信,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7704687/

10-11 20:21
查看更多