微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

OMNet++ - 解析分成多个 TCP 段的应用程序数据包

如何解决OMNet++ - 解析分成多个 TCP 段的应用程序数据包

我正在 OMNet++ 平台内编写一个简单的 HTTP 服务器(作为 TCP 应用程序)。 它必须在模拟和仿真模式下与客户端一起工作。 HTTP 响应消息可能非常大,因此它到达时会拆分成更多 TCP 段(根据来自 TCP 的字节流多次调用 socketDataArrived 方法)。

现在,我获取原始字节并将它们转换为字符串:

socketDataArrived(inet::Tcpsocket *socket,inet::Packet *msg,bool urg)
{
    std::vector<uint8_t> bytes =  msg->peekDataAsBytes()->getBytes();
    std::string packet(bytes.begin(),bytes.end());
    parseTcpsegment(packet);
    ...
 }

然后我解析字符串以重新组合一个完整的 HTTP 消息(连接之前到达的其他字符串)。 该解决方案虽然不是很像 OMNeT++,但也允许管理从模拟器外运行的应用程序到达的长 HTTP 消息(例如来自具有长正文的客户端的 POST 请求)。

是否存在更好的方法,利用 INET 库来改进这一点?

我尝试编写一个 HTTP 消息包(来自 FieldChunk)和序列化器/反序列化器,但我不知道当消息来自模拟客户端时是否可以使用它。

当我使用模拟时,我将通过检查块是否已全部到达 msg->hasAtFront<HttpResponseMessage>() 来使用 HTTP 消息包。但我收到图中描述的错误

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。