是否可以通过1发送触发2接收回调

Is it possible to fire 2 receive callback which is fired by 1 send?

本文关键字:回调 可以通过 1发 是否      更新时间:2023-10-16

我正在做一个网络项目。我必须知道,如果我从客户端向服务器侦听器发送数据,侦听器是否可以通过2个或多个回调(TCP阻塞)来处理这些数据?也就是说,我已经发送了"Hello World",服务器侦听器(TCP阻塞)能像1"Hello"2"World"或1"Hell"2"o World"等一样处理这个接收吗。?如果这是可能的,我将为我的TCP数据包创建一个数据包处理程序。谢谢

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

  • 客户说"你好,世界"
  • 服务器在第一次回调中读取"Hello""recv();"recv(函数提供"Hello"输出)
  • 服务器在第二次回调中读取"world""recv();"recv(函数提供"世界"输出)

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

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

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

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

或者,你可以使用你的特殊协议(如果你有)来区分它们。

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