ZMQrecv随机拾取垃圾数据,任何人都不知道为什么
本文关键字:任何人 不知道 为什么 数据 随机 ZMQrecv | 更新日期: 2023-09-27 17:58:05
我有一个客户端-服务器应用程序,它将数据从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结尾的指针。
所以我认为这里发生的是缓冲区下溢。您正在读取不属于字符串的内存。