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