如果您通过一次调用中的套接字向send()发送数据,是否会在一次调用中接收到receive()?

ttt*_*ttt 2 sockets

我已经看到了套接字的几种用法,程序员通过TCP/IP套接字发送命令或一些信息,并期望在接收端的一次调用中接收它.

例如,传输

mySocket.Send("SomeSpecificCommand")
Run Code Online (Sandbox Code Playgroud)

他们假设接收方将在一次通话中接收所有数据.例如:

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()
    ...
Run Code Online (Sandbox Code Playgroud)

上面的示例不使用任何终结符,因此程序员依赖于不允许套接字实现的事实,例如,在第一次调用Receive()时返回"SomeSpecif",并在稍后返回"cCommand"致电Receive().(注意 - 在示例中,缓冲区的大小应大于预期的字符串).

我从来没有考虑过这么多想法,只是假设这种类型的编码是不安全的,并且总是使用分隔符.我是否在浪费时间(和处理器周期)?

dgn*_*ton 7

无法保证全部同时到达.代码(应用程序的协议)需要处理来自一个发送的数据可能以多个部分到达的可能性,或者来自多个发送的数据可能到达一个接收的可能性.