我的问题很简单。可以在tcp连接中分离一些数据(如标题所示)?例如,如果我调用MySocket.Send(Encoding.UTF8.GetBytes("this is a test!");
,我可以从连接的另一端获得2个单独的接收操作,例如“this is”和“test”吗?即,可靠是多少Tcp?
答案 0 :(得分:3)
TCP通常用作流;不保证无论如何使“发送”和“接收”操作一对一匹配。在技术上有效(但不是unlikley)必须读15次,每次获得1个字节。因此,通常有两种操作模式:
0
或行尾(无论是CR,LF,CRLF还是LFCR都取决于您!)(但是线路模糊;例如,redis协议大致基于文本,但使用${n}\r\n{data}\r\n
形式的纯文本长度前缀,其中{n}
是数字字节表示为ASCII字符串,{data}
是原始n
字节)
答案 1 :(得分:0)
是的,它们可以作为多个部分发送。您不能假设单个发送操作将导致另一端的单个接收。
阅读“消息框架”中的stephen cleary's article了解更多信息。 this也是message framing code。和样本{{3}}