you actually receive 2 frames from the zmq stream socket, you have to strip 
them of one by one.


The first one you have to conserve in case you want to respond to that peer the 
message comes from.

The second one is your actual data.


ju


________________________________
From: zeromq-dev <zeromq-dev-boun...@lists.zeromq.org> on behalf of Brian 
Wagener <andr...@forceconstant.com>
Sent: Wednesday, November 29, 2017 3:00 PM
To: zeromq-dev@lists.zeromq.org
Subject: [zeromq-dev] Using ZMQ_STREAM as tcp client. Why am I receiving extra 
info?

I have an application that uses zeromq for various things and want to also use 
it as a tcp client for other external connections. Currently if the external 
tcp server sends data, the client receives 5 byte id, 0 bytes, 5 bytes, and 
then actual message. How do I get zeromq not to send this stuff.



#include <iostream>

#include <string>

#include <zmq.h>

#include <cstring>

#include <assert.h>

#include <chrono>

#include <thread>





int main()

{

void *mpSocketContext = zmq_ctx_new();



/* Create ZMQ_STREAM socket */

void *mpSerialSocket = zmq_socket(mpSocketContext, ZMQ_STREAM);

void *mpSocket = mpSerialSocket;

bool aeBlocking = true;



std::string asAddress = "127.0.0.1:1236<http://127.0.0.1:1236>";

asAddress = "tcp://" + asAddress;



std::cout << "tcSerialServerPort::tcSerialServerPort: connecting to " << 
asAddress << std::endl;



int rc = zmq_connect(mpSerialSocket, asAddress.c_str());

if (rc != 0)

std::cout << "ZMQ ERROR: zmq_connect " << zmq_strerror(zmq_errno()) << 
std::endl;



uint8_t id [256];

size_t id_size = 256;

rc = zmq_getsockopt (mpSerialSocket, ZMQ_IDENTITY, id, &id_size);

assert(rc == 0);



while(true)

{

zmq_msg_t msg;

zmq_msg_init(&msg);

size_t lnBytesReceived = 0;

std::string lsStr;



lnBytesReceived = zmq_recvmsg(mpSocket, &msg, aeBlocking ? 0 : ZMQ_DONTWAIT);



lsStr = std::string(static_cast<const char*>(zmq_msg_data(&msg)),

zmq_msg_size(&msg));





std::cout << "Received Bytes=" << lsStr.size() << " Data=" << lsStr << 
std::endl;



zmq_msg_close(&msg);



std::this_thread::sleep_for(std::chrono::seconds(1));

}





zmq_close(mpSerialSocket);

zmq_ctx_destroy(mpSocketContext);



return 0;

}





Brian Wagener

Lockheed Martin Undersea Systems

Software Engineer Stf

West Palm Beach, FL



_______________________________________________
zeromq-dev mailing list
zeromq-dev@lists.zeromq.org
https://lists.zeromq.org/mailman/listinfo/zeromq-dev

Reply via email to