【发布时间】:2011-04-19 12:20:15
【问题描述】:
我已经看到了套接字的几种用法,程序员通过 TCP/IP 套接字发送命令或一些信息,并期望在接收端的一次调用中接收到它。
例如,传输
mySocket.Send("SomeSpecificCommand")
他们假设接收方将在一次调用中接收所有数据。例如:
Dim data(255) As Byte
Dim nReceived As Long = s.Receive(data, 0, data.Count, SocketFlags.None)
Dim str As String = Encoding.ASCII.GetString(data, 0, n)
If str = "SomeSpecificCommand" Then
DoStuff()
...
上面的例子没有使用任何终止符,所以程序员依赖于套接字实现是不允许的,例如,在第一次调用 Receive() 时返回“SomeSpecif”,以及“cCommand”在稍后对 Receive() 的调用中。 (注意 - 在示例中,缓冲区的大小大于预期的字符串)。
我以前从来没有考虑过这么多,只是假设这种编码是不安全的,并且一直使用分隔符。我是否一直在浪费时间(和处理器周期)?
【问题讨论】:
-
感谢大家的回答。有些人可能会感兴趣,我开始对此感到疑惑的原因是,在 USB 设备驱动程序中,这个假设是正确的,应该使用它,因为它更有效。
标签: sockets