C ++如何实现进程间套接字通信?

时间:2013-07-11 14:59:03

标签: c++ sockets winsock interprocess

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

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

2 个答案:

答案 0 :(得分:2)

如果要控制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;
    }
}

答案 1 :(得分:0)

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