1

我正在做一个网络项目。我必须知道,如果我将数据从客户端发送到服务器侦听器,侦听器可以使用 2 个或更多回调(TCP 阻塞)处理此数据吗?即我已经发送了“Hello World”,服务器监听器(TCP 阻塞)可以像 1“Hello”2“World”或 1“Hell”2“o World”等那样处理这个接收吗?如果这是可能的,我将为我的 TCP 数据包创建一个数据包处理程序。谢谢!

编辑:( 更多描述),这是可能的(TCP阻塞)吗?

  • 客户说“你好世界”
  • 服务器在第一个回调“recv();”中读取“Hello ” (recv();函数给出“Hello”输出
  • 服务器在第二个回调“recv();”中读取“world ” (recv();函数给出“世界”输出
4

2 回答 2

1

是的,这是绝对可能的。在这种特殊情况下,这是不太可能的,但如果您的数据包比 12 字节大一点——比如几百或几千字节,如果您将它发送到比本地网络更远的地方,它几乎肯定会被拆分。

需要注意的是,你也可以得到相反的问题——发送端发送两个单独的“数据包”,而接收端只收到一个数据包。请记住,TCP 是流协议,而不是数据包协议 - 数据包仅作为底层协议栈的一部分存在,并且可以根据网络认为合适的方式拆分和合并。您所能保证的只是您收到的数据顺序正确,并且数据块的校验和是正确的。

于 2013-07-29T15:13:14.160 回答
0

如果您确切地知道数据的每个部分有多长(例如“Hello”是 5 个字符长),您可以在第一个回调中阻止读取,然后在第二个回调中阻止(单独调用 recv())。

或者,如果您知道这些部分将如何分隔(在您的情况下是空格),那么您可以在第一个回调中将 recv() 1 个字节,然后,当您收到分隔符时,切换到在第二个回调中接收。

或者,也许您可​​以使用您的特殊协议(如果有的话)区分它们。

但是,我仍然不确定您希望在哪一层单独解释这些包。

于 2013-08-04T20:18:45.633 回答