问题描述
我正在 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 消息包。但我收到图中描述的错误
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)