我目前有这段代码:
PACKETS = {};
function AddPacket(data)
local id = data.ID;
PACKETS[id] = {
data.IP,
data.PORT,
data.PACKET,
data.SOURCEIP,
data.SOURCEPORT,
data.PPMS};
end
function RemovePacket(id)
PACKETS[id] = nil;
end
function LoopedThread()
for k,v in pairs(PACKETS) do
for i=1, v.PPMS do
SendPacket(v.IP, v.PORT, v.PACKET, v.SOURCEIP, v.SOURCEPORT);
end
end
Sleep(1);
end
这是以lua为例进行的,但是我需要在C ++中完成。我有点困惑,因为我无法在尝试制作时工作,如果有人可以帮助我,甚至让我开始,谢谢。
我已经编写了套接字。
答案 0 :(得分:1)
难道你不能只将Lua与C / C ++集成吗?这种语言的构建是为了与C / C ++轻松集成,这在游戏开发中很常见。我建议你使用luabind
。它是boost::python
库的Lua版本。链接:vhttp://www.rasterbar.com/products/luabind.html
答案 1 :(得分:0)
您是否熟悉C ++中的Standard Template Library?它可能有一堆容器类型,可以帮助你完成你正在尝试的东西。
对我来说,看起来你正在做的事情将通过实现包含成员变量“IP”,“PORT”等的“Packet”结构或类来实现。
然后,如果您想存储它们并通过其ID访问它们,您可以创建一个stl::map,从ID号映射到数据包。
或者,与数据包一样,您最终可能希望以先进先出的方式存储它们,这可以使用stl::queue来完成。随着队列的出现,它们按照你输入的顺序排列,所以如果你排队1,2和3以及后来去访问其中的两个,你将按顺序获得数据包1和2,3将仍然留待以后。
我的C ++非常生疏,但我想的是这样的事情:
struct Packet {
char* ip;
short port;
// ... etc ...
}
stl::queue<Packet> packet_buffer;
void AddPacket(const Packet& packet_in) {
packet_buffer.push(packet_in);
}
void RemoveLastPacket() {
packet_buffer.pop();
}
void LoopedThread() {
while (!packet_buffer.empty()) {
SendPacket(packet_buffer.front());
RemoveLastPacket();
}
}
您可以使用地图执行类似操作,但速度会更慢且效率更低。除非你真的需要根据其ID查找特定的数据包,否则我会坚持使用一个队列,这可能会非常快。