zeromq 클라이언트 서버 hello world

7423 단어 zeromq
나는 여기서 최신판의zeromq4.2.0을 사용했다. zguide의 예를 그대로 베꼈는데 뜻밖에도 오류를 보고했다. 오류 정보는 다음과 같다.
gcc -Wall -g hwclient.c -lzmq -o hwclient
hwclient.c: In function ‘main’:
hwclient.c:21:9: error: too few arguments to function ‘zmq_send’
         zmq_send (requester, &request, 0);
         ^~~~~~~~
In file included from hwclient.c:1:0:
/usr/local/include/zmq.h:430:16: note: declared here
 ZMQ_EXPORT int zmq_send (void *s, const void *buf, size_t len, int flags);
                ^~~~~~~~
hwclient.c:26:9: error: too few arguments to function ‘zmq_recv’
         zmq_recv (requester, &reply, 0);
         ^~~~~~~~
In file included from hwclient.c:1:0:
/usr/local/include/zmq.h:432:16: note: declared here
 ZMQ_EXPORT int zmq_recv (void *s, void *buf, size_t len, int flags);

그리고 zmq를 보러 갑니다.h의 원본 코드, 발견 zmq_recv 및 zmq_send 함수는 모두 네 개의 매개 변수가 있다.
ZMQ_EXPORT int zmq_send (void *s, const void *buf, size_t len, int flags);
ZMQ_EXPORT int zmq_recv (void *s, void *buf, size_t len, int flags);

그리고 저는 hwclient에 있습니다.c 안에 이 두 함수 매개 변수에 모두 0을 추가했습니다. 컴파일은 통과했습니다!클라이언트는 C 언어로 구현됩니다.
//hwclient.c
#include 
#include 
#include 
#include 

int main (void)
{
    void *context = zmq_init (1);

    //   
    printf (" hello world ...
"
); void *requester = zmq_socket (context, ZMQ_REQ); zmq_connect (requester, "tcp://localhost:5555"); int request_nbr; for (request_nbr = 0; request_nbr != 10; request_nbr++) { zmq_msg_t request; zmq_msg_init_size (&request, 5); memcpy (zmq_msg_data (&request), "Hello", 5); printf (" Hello %d...
"
, request_nbr); zmq_send (requester, &request, 0,0); zmq_msg_close (&request); zmq_msg_t reply; zmq_msg_init (&reply); zmq_recv (requester, &reply, 0,0); printf (" World %d
"
, request_nbr); zmq_msg_close (&reply); } zmq_close (requester); zmq_term (context); return 0; }

C++로 작성된 클라이언트 코드는 다음과 같습니다.
//hwserver.c
#include 
#include 
#include 
#include 

int main () {
    //  
    zmq::context_t context (1);
    zmq::socket_t socket (context, ZMQ_REP);
    socket.bind ("tcp://*:5555");

    while (true) {
        zmq::message_t request;

        //  
        socket.recv (&request);
        std::cout << "  Hello" << std::endl;

        //  “ ”
        sleep (1);

        //  World
        zmq::message_t reply (5);
        memcpy ((void *) reply.data (), "World", 5);
        socket.send (reply);
    }
    return 0;
}

terminal 두 개 켜고 하나../hwclient, 하나./hwserver, 결과는 다음과 같습니다.
./server
  Hello
  Hello
  Hello
  Hello
  Hello
  Hello
  Hello
  Hello
  Hello
  Hello
./hwclient
 hello world ...
  Hello 0...
  World 0
  Hello 1...
  World 1
  Hello 2...
  World 2
  Hello 3...
  World 3
  Hello 4...
  World 4
  Hello 5...
  World 5
  Hello 6...
  World 6
  Hello 7...
  World 7
  Hello 8...
  World 8
  Hello 9...
  World 9

좋은 웹페이지 즐겨찾기