-3

我目前有这个代码:

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++ 中完成。我有点困惑,因为我在尝试制作它时无法让它工作,如果有人可以帮助我甚至让我开始,谢谢。

我已经对套接字进行了编码。

4

2 回答 2

1

你不能把 Lua 和 C/C++ 集成起来吗?这种语言是为了轻松与 C/C++ 集成而构建的,它在游戏开发中非常普遍。我建议您使用luabind. 这是一个 Lua 版本的boost::python库。链接:vhttp://www.rasterbar.com/products/luabind.html

于 2012-06-22T05:42:59.493 回答
0

您是否熟悉C++ 中的标准模板库?它可能有一堆容器类型可以帮助你完成你正在尝试的事情。

对我来说,看起来你正在做的事情可以通过实现一个包含成员变量“IP”、“PORT”等的“数据包”结构或类来完成。

然后,如果您想存储它们并通过它们的 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 来查找一个特定的数据包,否则我会坚持使用一个队列,它可以非常快。

于 2012-06-22T06:00:42.030 回答