我在使用ZeroMQ使用clrzmq向C ++发送来自C#Web服务的消息时遇到问题。我用NuGet安装了clrzmq,我从C ++源代码创建了libzmq。
我在向C ++发送和从C ++接收时没有问题,但是,从C#发送到C ++的每条消息都是零大小的。
这是执行PUSH的C#代码。
var context = new ZMQ.Context(1);
var requester = Socket(ZMQ.SocketType.PUSH);
String connectionendpoint = "tcp://127.0.0.1:9997";
requester.Bind(connectionendpoint);
String testrequest = "TESTMESSAGE";
byte[] msg = Encoding.ASCII.GetBytes(testrequest);
SendStatus r = requester.Send(msg);
if (r == SendStatus.Sent)
{
Console.WriteLine("Sent OK"); // <- Debugger arrives here with OK status
}
输出
Sent OK
这是C ++中的接收端
zmq::context_t context(1);
zmq::socket_t receiver(context, ZMQ_PULL);
int rc = zmq_connect(receiver, "tcp://127.0.0.1:9997");
std::cout << "Waiting for message " << std::endl;
zmq::message_t message;
bool success = receiver.recv(&message);
size_t msgsize = message.size();
std::cout << "Success " << success << std::endl;
std::cout << "Message Size " << msgsize << std::endl;
输出
Success 1
Message Size 0
我还尝试了以下从C#到C ++的Connect / Bind组合:
Bind - Connect
连接 - 绑定
连接 - 连接
Bind - Bind(失败,正如预期的那样。两者都无法绑定到同一个端口)
问。有什么明显的东西我错过了/做错了吗?
问。当邮件大小为零时,为什么发件人和收件人都报告成功传输而没有错误?
提前致谢。
编辑1:在查看与此类似的其他问题后,我检查了版本,clrzmq libzmq.dll版本是4.1.5.0,我从源码构建的C ++版本是4.2.1.0。我尝试对齐这些版本,但这没有效果。