ZMQrecv随机拾取垃圾数据,任何人都不知道为什么
ZMQ recv randomly picks up garbage data does any one know why?
我有一个客户端-服务器应用程序,它将数据从C#客户端发送到C++服务器。当服务器收到这个数据请求时,10次中有9次工作正常,但总有1次服务器端收到的数据末尾会附加垃圾数据。
例如,它将接收1C或1@????,而不是接收数字1????
以下是客户端和服务器代码的片段,如有任何帮助,我们将不胜感激。
C#客户端
int flagSide = 1;
msg = name;
msg += "+";
msg += "qty";
msg += "+";
msg += flagSide.ToString();
ZeroMQ.ZmqContext context = ZeroMQ.ZmqContext.Create();
ZeroMQ.ZmqSocket socket = context.CreateSocket(SocketType.REQ);
socket.Connect("tcp://111.111.0.111:5556");
socket.Send(Encoding.ASCII.GetBytes(msg.ToCharArray()));
Thread.Sleep(1);
string reply = socket.Receive(Encoding.ASCII);
Console.WriteLine("Received reply = " + reply + "n");
C++服务器
std::tr1::unordered_map <std::string, std::string> aMap;
zmq::context_t context( 1 );
zmq::socket_t responder( context, ZMQ_REP );
responder.bind ("tcp://*:5556");
while ( 1 )
{
zmq::message_t recvMsg;
responder.recv( &recvMsg );
t = static_cast<char*>( recvMsg.data() );
std::string s(t);
std::vector<std::string> strs;
boost::split(strs, s, boost::is_any_of("+"));
aMap["name"] = strs[0];
aMap["qty"] = strs[1];
aMap["flag"] = strs[2];
..........
在服务器中输出拆分字符串表明,有时flag或strs[2]会接收垃圾数据。
如果你看到我没有看到的东西,请帮帮我。
感谢
在C#中,转换为字节的字符串不以null结尾,C++字符串需要一个以null结尾的指针。
所以我认为这里发生的是缓冲区下溢。您正在读取不属于字符串的内存。
相关文章:
- 努力将整数转换为链表。不知道我在这里做错了什么
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 叮当不知道PTRDIFF_MAX?
- 如何在不知道向量大小的情况下输入向量内部的向量?
- 我正在尝试使用 c++ 创建一个货币转换程序,我不知道如何继续
- 不知道某个东西是否被忽略会引入未定义的行为吗
- 如何在C++中读取空格分隔的输入 当我们不知道输入的数量时
- 我不知道这条线是做什么的
- 如何在不知道C++中有多少可选参数的情况下在循环中使用va_arg?
- 在不知道套接字的情况下关闭网络连接
- 如果我不知道每个列表中有多少个数字,我如何将给定数量的数字列表作为输入?
- 我不知道导致错误的原因 (C3074)
- 我不知道为什么这段代码会让核心被转储?
- 我正在尝试制作一个自平衡机器人,但编译时存在错误。我不知道如何解决它
- 循环通过网格获取温度,但不知道如何告诉程序停止循环
- 如何在不知道对应关系的情况下在字符串中搜索字符并将其分配给另一个字符?
- 反转字符串.不知道为什么这个逻辑是错误的.C++
- 当我运行此代码时,它输出 40,而不是 39.任何人都知道为什么
- ZMQrecv随机拾取垃圾数据,任何人都不知道为什么