2

我想使用 C++ 在服务器和多个客户端进程之间使用套接字设置进程间通信。服务器和所有客户端进程将在同一台 Windows 7 计算机上运行。目的是std::vector数据将由服务器保存并传输到每个客户端。不时地,服务器持有的向量将被扩展(push_back())更多的数据元素,额外的数据将需要传输到每个客户端。任何人都可以提供如何执行此操作的示例、相关参考资料或简单的“玩具”代码示例的链接吗?

编辑:经过进一步调查,我发现 Winsock 是合适的。谷歌搜索显示了很多关于如何设置 Winsock 服务器和客户端安排的示例。但是,关于如何通过套接字实际传递数据的信息较少。任何人都可以扩展如何std::vector通过套接字通信在服务器和客户端之间同步?每个客户端都需要指出它已经传递了哪个元素索引,并且服务器将只提供客户端还没有的那些元素。

4

2 回答 2

3

如果你想控制 tcp/udp 层之上的协议,试试libeventBoost.Asio。如果您对能够传递消息更感兴趣,那么请查看ZeroMQAMQP之类的东西。

使用 ZeroMQ 的服务器示例

#include <iostream>
#include <zmq.hpp>

int main(int argc, const char* argv[])
{
    // create a ZeroMQ network context using 1 thread
    zmq::context_t ctx(1);

    // We are 'UPSTREAM' i.e. a receiver
    zmq::socket_t sock(ctx, ZMQ_UPSTREAM);

    sock.connect("tcp://localhost:12345");

    zmq::message_t msg;
    while (sock.recv(&msg)) {
        std::cout << "rx: " << (const char*)msg.data() << std::endl;
    }
}
于 2013-07-11T15:16:30.487 回答
0

如果进程总是在同一台服务器上运行,您可能会考虑使用Boost.Interprocess而不是套接字来处理通信。

于 2013-07-11T21:44:01.950 回答