我的问题很简单。可以在 TCP 连接中分离某些数据(如标题所示)吗?例如,如果我打电话MySocket.Send(Encoding.UTF8.GetBytes("this is a test!");
,我可以从连接的另一端获得 2 个单独的接收操作,例如“这是”和“测试”吗?即多少reliable是TCP吗?
TCP通常被用作stream;没有保证任何使得“发送”和“接收”操作一对一匹配。必须读取 15 次,每次获取 1 个字节,这在技术上是有效的(但不太可能)。因此,通常有两种操作模式:
- 读取直到流结束(发送者在发送消息后关闭其出站套接字)
- add some kind of framing protocol
- 对于基于文本的协议,这通常是一个哨兵值,例如
0
或行尾(无论是 CR、LF、CRLF 还是 LFCR 由您决定!)
- 对于二进制协议,这通常是某种明确定义格式的长度前缀,告诉您下一条消息要考虑多少字节
(但是这条线很模糊;例如,redis 协议大致基于文本,但使用以下形式的纯文本长度前缀${n}\r\n{data}\r\n
, where {n}
是表示为 ASCII 字符串的字节数,并且{data}
是原始的n
bytes)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)