2 huang nick huang_nick 于 2016.03.01 16:52 提问

zeromq socket网络传递结构体 1C

我在服务器端发了一个结构体,在client端接收,发送应该是正常的,客户端也接到了这个数据但是一访问成员变量就segment fault,zeromq 接收到在zmq::msg_t中有个size()函数返回接收到数据的size 我比对了一下是对的上的 但是一访问成员变量就出错,觉得很奇怪,应该是会编译器以及结构体的存储有关,本人新手,求各位大神指点一二 有分

4个回答

huang_nick
huang_nick   2016.03.01 16:55

另外 我两端的操作系统以及编译器版本都一样 应该不存在大小端的问题

huang_nick
huang_nick   2016.03.01 16:55

另外 我两端的操作系统以及编译器版本都一样 应该不存在大小端的问题

huang_nick
huang_nick   2016.03.01 17:14

附上代码 client:
#include
#include
#include
#include "../Desktop/market_handlers/src/common/zhelpers.hpp"
using namespace std;

struct shared {
string a;
string b;
string c;
};

struct shared sh;

int main ()
{
//Prepare our context and socket
zmq::context_t context (1);
zmq::socket_t socket(context, ZMQ_SUB);
socket.setsockopt(ZMQ_SUBSCRIBE, "", 0);
socket.connect("tcp://52.69.36.106:10014");
while (true) {
/*
std::string str = s_recv(socket);
cout << str;
*/
string h;
// zmq::message_t msg;
zmq_msg_t msg;
// socket.recv(&msg);
while(true) {
zmq_recv(socket, &msg, 1);

// cout << msg.size() << "\n";
struct shared* sha = reinterpret_cast(&msg);
// cout << static_cast(msg.data())->a << "\n";
cout << sha->a;
}
}
return 0;
}

huang_nick
huang_nick   2016.03.01 17:14

server:
#include
#include

#include "market_handlers/src/common/zhelpers.hpp"
using namespace std;

struct shared {
string a;
string b;
string c;
};

struct shared sh;
struct shared sh1;

int main() {
zmq::context_t context(1);
zmq::socket_t socket(context, ZMQ_PUB);
zmq_bind(socket, "tcp://*:10014");
while (true) {
string str;
cin >> str;
sh.a = str;
cout << sh.a << "\n";
// zmq::message_t msg(sh, sizeof(sh), NULL);
// cout << static_cast(msg.data())->a << "\n";
zmq_msg_t msg;
// cout << "send? " << s_send(socket, str) << "\n";
cout << "data ready? " << zmq_msg_init_data(&msg, &sh, sizeof(sh), NULL, NULL) << "\n";
// cout << "data is " << static_cast(zmq_msg_data(&msg))->a << "\n";
cout << zmq_send(socket, &msg, 1) << "\n";
// cout << socket.send(msg, 1) << "\n";
// cout << socket.send(msg , ZMQ_SNDMORE) << "\n";
}
return 0;
}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
TCP Socket和ZeroMQ socket的区别
• ZeroMQ sockets are asynchronous. zmq套接字是异步的 • They may implement particular patterns. 可以实现特定模式 • TCP sockets are one-to-one whereas ZeroMQ sockets are many-to-many. However, you could i
ZeroMQ(java)Socket之Req
前面的一篇文章分析了Dealer类型的Socket,它的行为是非常简单的, 它会维护一个链表,在链表的前面是当前活动的pipe,因为pipe连接的是下面的Session,那么活动的pipe也就意味着活动的StreamEngine,那么也就意味着活动的连接, 对于执行send方法,也非常的简单,就是在活动的pipe部分,通过循环的方式,选出一个pipe,将数据写进去就好了,因为可以看成是循环的遍
浅析网络开发框架——ZeroMQ
据官方文档介绍,ZeroMQ是一个可伸缩的分布式或者高并发的异步网络消息库。不同于其他的服务,例如RabbitMQ等消息队列服务,是以一种可独立运营的服务存在,ZeroMQ更像是一套socket library,是对BSD socket进行的上层封装。在传统的BSD网络开发模型中,采用的是socket与socket之间的消息传输,即1:1的消息传输链接,在ZeroMQ中是node与node之间的消息传输,node之间存在多条数据链接,即N: M的消息传输链接。ZeroMQ在底层实现了关于进程通信、网络通信、
ZeroMQ(java)Socket之Dealer
好像也有一段时间没有写博客了。。。 ZeroMQ到现在,其实基本的原理也都了解的还算差不多了,剩下的就是一些细节的了。。。 我们知道ZeroMQ中定义了很多类型的Socket,其实这个里面最为简单的就是Dealer类型的socket看了,它基本没有做太多额外的处理。。。 在看具体的Dealer之前,先来看看两个类型,其实是两个工具类,用于维护在pipe上面执行的读写操作。。。 首先是FQ类
zeromq源代码分析6-1------zeromq各种类型的socket之socket_base
我们在zeromq源代码分析6中分析zeromq所有类型的socket,主要集中分析send和recv函数。今天我们先分析一下所有socket中base class------socket_base:先看send(2)函数:int zmq::socket_base_t::send
Linux C socket传输结构体
服务器端: 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #include<sys/types.h> 5 #include<sys/socket.h> 6 #include<netinet/in.h> 7 #include<arpa/inet.h> 8 9 10 11 #def
【ZeroMQ】ZeroMQ及其模式
刚刚这个国庆,对程序员来说,最糟心的事情莫过于 ZeroMQ 的作者 Pieter Hintjens 的安乐死。想必你的朋友圈也传过了那篇令人感怀的 A protocal for dying。如果你还没看,翻翻朋友圈,仔细读一读,然后收藏起来,一两年后再看上一看。可敬的 Pieter,临终前的 last words,也不放过自己搞 messaging 的本行,借用了 Alice 和 Bob(htt
C++ socket传输结构体
struct Test { char ip[30]; char name[30]; }; Test te; char buff[1024]; memset(buff, 0, 1024); memset(&te, 0x00, sizeof(Test)); //直接接收结构体 recv(serConn, (char*)(&te), sizeof(Test), NU
ZeroMQ:现代而快速的网络栈
ZeroMQ:现代而快速的网络栈 Ilya Grigorik 于 2010年9月3日,原文 ZeroMQ: Modern & Fast Networking Stack 炽火译,2013年01月22日 Berkeley Socket(BSD)是所有网络通信共同使用的API。建立于20世纪80年代初期,它是TCP/IP协议族的原始实现,是目前任何操作系统广泛支持的必备组件。BSD套接字中我
Socket传输结构体数据注意事项
【1 背景】 在Socket通信中,要传输结构化的数据或者要进行协议数据传输的时候,发送端必须要构造结构体进行数据传输。 接收端也必须通过同样的结构体进行解析。 但Socket传输结构体数据时候,稍有不慎就会出现:1)解析数据出错;2)接收数据不完整;3)解析为乱码等的Bug。 【2 举例】 如下是接收端解析数据为乱码甚至崩溃的一类常见错误。