Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <zmq.hpp>
- #include <list>
- #include <stdlib.h>
- #include <time.h>
- bool checkLabel( zmq::socket_t * sock ) {
- int opt;
- size_t optlen = sizeof(opt);
- sock->getsockopt( ZMQ_RCVLABEL, &opt, &optlen );
- return opt;
- }
- bool checkMore( zmq::socket_t * sock ) {
- int opt;
- size_t optlen = sizeof(opt);
- sock->getsockopt( ZMQ_RCVMORE, &opt, &optlen );
- return opt;
- }
- void printMsg( zmq::message_t &msg ) {
- char * data = (char *) msg.data();
- for( int i=0; i<msg.size(); ++i ) {
- if( isprint(data[i]) )
- printf( "%c", data[i] );
- else
- printf( "?" );
- }
- printf("\n");
- }
- int main (int argc, const char * argv[])
- {
- zmq::context_t ctx(1);
- if( argc == 1 || strcmp( argv[1], "-s" ) != 0 ) {
- //If we're in "client" mode, create a ZMQ_REQ
- zmq::socket_t sock( ctx, ZMQ_REQ );
- sock.connect( "tcp://127.0.0.1:5040" );
- //Send some random
- char * sendAsLabel = "This is my Label";
- zmq::message_t labelMsg( (void *)sendAsLabel, strlen(sendAsLabel) + 1, NULL );
- sock.send( labelMsg, ZMQ_SNDLABEL );
- //Send whatever random junk is on the stack as data
- char sendAsData[80];
- zmq::message_t dataMsg( (void *)&sendAsData[0], sizeof(sendAsData), NULL );
- sock.send( dataMsg );
- usleep( 1000*1000 );
- } else {
- zmq::socket_t sock( ctx, ZMQ_ROUTER );
- char * addr = "tcp://127.0.0.1:5040";
- sock.setsockopt( ZMQ_IDENTITY, addr, strlen(addr) );
- sock.bind( addr );
- while( true ) {
- do {
- zmq::message_t msg;
- sock.recv( &msg );
- if( checkLabel( &sock ) )
- printf( "LABEL [%lu] - ", msg.size() );
- else
- printf( "DATA [%lu] - ", msg.size() );
- printMsg( msg );
- } while( checkMore( &sock ) );
- printf( "--------------------\n" );
- }
- }
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement