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 (将#修改为@)