是否可以通过1发送触发2接收回调
Is it possible to fire 2 receive callback which is fired by 1 send?
我正在做一个网络项目。我必须知道,如果我从客户端向服务器侦听器发送数据,侦听器是否可以通过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。
或者,你可以使用你的特殊协议(如果你有)来区分它们。
但是,我仍然不确定您希望在哪一层对这些包进行单独解释。
相关文章:
- 如果 C 函数仍然可以间接执行(通过回调函数),那么将它声明为静态函数是否是一种不好的做法?
- 通过实用程序 fn 将捕获的 lambda 传递给 C 样式回调 - 错误
- 我可以使用谷歌 v8 在回调函数中获取 JavaScript 函数C++源文本吗?
- 是否可以影响 C++ 中回调函数的局部变量?
- 在通过 P/Invoke 获取的 C++ 结构上设置 C# 回调
- SetTimer (带有回调函数)是否通过启动新线程来工作?
- 通过 Boost Python 将 Python 函数转换为 C++,用作回调
- 为什么可以在没有实例变量的情况下访问静态回调方法中的静态成员变量?
- 哪些消息可以传递给低级鼠标挂钩回调函数
- 可以使用仅功能成员属性进行回调界面
- 是否可以使用包含{sub,super}类函数指针的回调表
- 通过回调提供数据服务
- C QT,通过回调
- 通过功能指针通过DLL进行回调功能,运行时检查失败#0错误
- 当满足条件时,是否可以在 GLSL 着色器中回调 C/C++ 函数/代码
- 如何通过引用传递成员回调函数
- 是否可以在C 中使回调函数返回值
- 一个c++ signals2槽回调可以包含Objective-C/ c++类/选择器(方法)信息吗?
- 如何从c# /创建回调.. NET通过COM转换为c++
- 消息传递系统:回调可以是任何东西