我一直在努力將ENet包裝成一套易於使用的功能,現在幾周,似乎有點問題。從穀物發送二進制數據的StringStream與ENet
我有一個std :: stringstream,並試圖使用ENet將內容發送到遠程計算機,然後重建遠程計算機上的std :: stringstream。
我需要使用std :: stringstream的原因是由於我正在使用需要流的穀物序列化庫序列化我的數據。
在Azoth的幫助下,他發現我需要使用std :: istringstream和std :: ostringstream。以前我只使用std :: stringstream導致異常。
但是現在一個異常被麥片內的portable_binary.hpp行拋出156:
throw Exception("Failed to read " + std::to_string(size) + " bytes from input stream! Read " + std::to_string(readSize));
下面是我在做什麼:
void Send(ENetHost* Host)
{
std::ostringstream SData;
{
cereal::PortableBinaryOutputArchive Archive(SData);
Archive(PacketData);
}
std::string Out = SData.str();
ENetPacket* Packet = enet_packet_create(Out.c_str(), Out.size(), ENET_PACKET_FLAG_RELIABLE);
enet_host_broadcast(Host, 0, Packet);
}
穀物移植二進制數據存檔被構造成擁有一個單一的載體。 使用ENet將std :: ostringstream發送給主機。
這部分似乎工作正常,我可以在前後打印信息,雖然有些奇怪的符號,但它們顯示的是相同的,但它們在兩端都打印出相同的信息。
現在在主機上用我們收到的數據創建一個std :: istringstream。
NetPacket(enet_uint8 const* Data)
{
std::istringstream SData(reinterpret_cast<char const*>(Data));
{
cereal::PortableBinaryInputArchive Archive(SData);
Archive(PacketData);
}
}
在這一點上,我收到異常在行:
Archive(PacketData)
我有一種感覺數據被以某種方式改變時,它的發送通過ENET和/或我不拉出來的數據正確的std :: ostringstream和/或不正確地將數據放回到std :: istringstream。
非常感謝你的時間我非常感謝你。
對於Google發現這個問題的人來說,請注意stringstream與普通二進制歸檔不起作用(給出類似的錯誤),但ostringstream會出於任何原因。 – Andrew