C++ zeromq经销商和路由器。从控制台(使用cin)获取输入时,我错过了来自其他客户端的消息

C++ zeromq经销商和路由器。从控制台(使用cin)获取输入时,我错过了来自其他客户端的消息,c++,sockets,zeromq,polling,C++,Sockets,Zeromq,Polling,我正在构建一个聊天服务器。我已经为每个套接字设置了标识。当我向服务器路由器发送消息时。服务器解析消息并提取预期消息的UUID。然后,服务器将消息发送到对应于该标识的客户端 我在客户端执行此操作: #include "zhelpers.hpp" #include <iostream> #include <string> #include "datamsg.pb.h" zmq::context_t context(1); zmq::socket_t backend (co

我正在构建一个聊天服务器。我已经为每个套接字设置了标识。当我向服务器路由器发送消息时。服务器解析消息并提取预期消息的UUID。然后,服务器将消息发送到对应于该标识的客户端

我在客户端执行此操作:

#include "zhelpers.hpp"
#include <iostream>
#include <string>
#include "datamsg.pb.h"


zmq::context_t context(1);
zmq::socket_t backend (context, ZMQ_DEALER);

using namespace google::protobuf::io;


static void * worker_thread(void *arg) {
    datamsg p = datamsg();
    p.set_source("cl3");p.set_port(5559);
    std::string input;
    while(1){
    getline (std::cin, input);   //separate thread for asynchronous input
    p.set_messagee(input.substr(3,(input.length()-1)));
    p.set_destination(input.substr(0,3));
    std::string str;
    p.SerializeToString(&str);
    zmq::message_t request (str.size());
    memcpy ((void *) request.data (), str.c_str(),str.size());
    backend.send(request);
 }
}

int main(void) {
   backend.setsockopt( ZMQ_IDENTITY, "cl3", 3);
   backend.connect("tcp://localhost:5559");
   zmq::message_t received_instant_msg;
   datamsg receive_parsed;
   pthread_t worker;
   pthread_create(&worker, NULL, worker_thread, NULL);
          std::cout <<"you are joinning" << std::endl;
while(1){


  zmq::pollitem_t items [] = {
 { backend, 0, ZMQ_POLLIN, 0 }
 };
 zmq::poll (items, 1, -1);
    if (items [0].revents & ZMQ_POLLIN) {
       std::string emptystring = s_recv (backend); //first string is empty ""
       backend.recv(&received_instant_msg); //Now parsing the message down there
       receive_parsed.ParseFromArray(received_instant_msg.data(),   received_instant_msg.size());
// printing the parsed messages here

                }  //ending if
    } //while
return 0;
}
我无法通过cin输入来接收消息。在控制台输入并发送输入后,我就可以从服务器接收排队的消息了:
我该怎么办。?多线程方法可以采用这种方式吗?如果是,那么怎么做?

如果你想让任何人知道它可能有什么问题,你必须提供实际的代码。@Jason我已经发布了代码,看看你是否能帮助我,请执行@Jason我需要在多个客户端之间进行通信。当我尝试在多个终端上运行文件时,我得到了相同的标识。所以我让路由器套接字自动设置UUID。但我发现我不能使用该标识存储在服务器上,以便在多个客户端之间进行路由。如何处理多个客户端ID。我正在尝试构建一个异步聊天服务器。我正在遵循一种方法,即每个客户机的经销商插座都连接到服务器路由器插座。服务器然后确定多个客户端ID并相应地读取消息和路由。明白了。为了不让你被绞死,我会在下一次机会看一看,看我是否能让你走上正确的道路。你混淆了两个不同的概念,我相信@user3666197是正确的,你没有完全理解你的需求。至少,我不完全理解你的要求,我认为除非我理解,否则我真的帮不了你。