我有典型的情况。我需要通过tcp向服务器发送“请求”并接收响应。
// socket is connected
socket.Send(CreateRequest());
byte[] br = new byte[VERY_BIG_BUFFER];
int count = socket.Receive(br); // only 4 bytes received: 15 0 0 0
count = socket.Receive(br); // here I receive data I actually need
但是出于某种原因,我必须两次致电socket.Receive
才能使一切正常。
在额外的通话中,我只收到四个字节:15 0 0 0。
硬编码一个额外的电话而不理解为什么我需要它可能会导致奇怪的问题。有人知道发生了什么,为什么我需要额外的电话?
答案 0 :(得分:2)
TCP是基于流的协议。它没有消息的概念。它只是一个字节序列。
这意味着它可以将一个send
来电分成多个receive
来电,并且可以将多个send
来电合并为一个receive
来电或其组合。< / p>
您需要以某种方式划分邮件。长度前缀是二进制协议的流行选择。