ZMQrecv随机拾取垃圾数据,任何人都不知道为什么

ZMQ recv randomly picks up garbage data does any one know why?

本文关键字:任何人 不知道 为什么 数据 随机 ZMQrecv      更新时间:2023-10-16

我有一个客户端-服务器应用程序,它将数据从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结尾的指针。

所以我认为这里发生的是缓冲区下溢。您正在读取不属于字符串的内存。

相关文章: