我想将一些数据(文本)发送到同一网络中的特定IP /端口。我知道我的代码已经足够好了,但我听到了一些关于“但建议使用类似长度前缀的消息” - 你们中的任何人都可以告诉我这是真的,如果是的话那么我应该在我的代码中改变什么什么?
''' <summary>
''' Send data over TCP/IP network
''' </summary>
''' <param name="data">Data string to write</param>
''' <param name="IP">The connected destination TcpClient</param>
Public Sub WriteData(ByVal data As String, ByRef IP As String)
Console.WriteLine("Sending message """ & data & """ to " & IP)
Dim client As TcpClient = New TcpClient()
client.Connect(New IPEndPoint(IPAddress.Parse(IP), My.Settings.CommPort))
Dim stream As NetworkStream = client.GetStream()
Dim sendBytes As Byte() = Encoding.ASCII.GetBytes(data)
stream.Write(sendBytes, 0, sendBytes.Length)
End Sub
答案 0 :(得分:1)
以下是我的意见:
通常,在数据通信上下文中,消息header
是
很高兴(包括消息的Length
- 可以放
作为header
的一部分,特别是当您的数据不同时
类型和各种长度。
这是因为在接收站点中,它可以选择如何处理 在完全接收所有数据之前输入数据。
例如,如果您有两种数据类型:非常长的文本和高度压缩的图像。标题(首先在接收方接收)将立即告知接收方正在接收哪种数据。
如果它是一个很长的文本,那么它可以在流完成之前处理它(比如显示部分内容),但是在高度压缩的图像中它无法完成。
在您可能收到多个(不同)的情况下也要考虑 来自发件人和来自相同端口的数据。在这种情况下,拥有 每个消息发送的标题将真正帮助接收者知道, 哪条消息属于哪些数据而不是错误地连接它们。
因此,在这种情况下,前缀长度也可以作为一部分
header
- 假设您的接收方可能会收到各种数据
可变长度。通过这个,它还知道何时考虑数据
沟通&#34;完成&#34;形成完整的数据包。
虽然这还没有完成......你通常可能想要检查收到的数据包的完整性(通过使用后缀/附加消息,如CRC)或某种加密/解密。
但总的想法是,出于上述原因,拥有它是好的。