【发布时间】:2020-07-09 22:35:08
【问题描述】:
我正在制作一个在三个不同部分中工作的应用程序。一台运行 C++ 的服务器和两台运行 C# 和 Python 的客户端。 客户端连接到服务器并发送消息。
为此,我选择了 ZeroMQ。
因为这是一个POC,所以代码很简单。
服务器代码 (C++) (cppzmq)
zmq::context_t context{ 1 };
zmq::socket_t socket{ context, zmq::socket_type::rep };
socket.bind("tcp://*:5555");
zmq::message_t request;
socket.recv(request, zmq::recv_flags::none);
Python 客户端 (pyzm)
context = zmq.Context()
socket = context.socket(zmq.REQ)
socket.connect("tcp://localhost:5555")
socket.send(b"Hello")
C# 客户端 (NetMQ)
using(var socket = new RequestSocket())
{
socket.Connect("tcp://localhost:5555");
byte[] msg = Encoding.ASCII.GetBytes("HEllo");
socket.SendFrame(msg);
}
Python客户端与服务端连接成功,服务端收到客户端发送的消息。 但是C#客户端和服务器的连接不正确。在 C# 端,假设你已经成功连接并传输了消息,但服务器没有反映任何变化(就像你没有收到呼叫一样)。
可能是什么原因?
【问题讨论】:
-
in
NetMqsocket.SendFrame似乎支持字符串类型。搏一搏。socket.SendFrame("HEllo")。参考:zeromq.org/get-started/?language=csharp&library=netmq# -
如果连续运行多次Python版本,然后连续运行C#版本,行为是否相同?处理 C++ 代码中的连续消息可能是个问题,而不是 C# 代码特有的任何问题。
-
@cdhowie,因为我正在测试软件,所以我没有连续运行。我的意思是我启动服务器并启动两个客户端之一,我从客户端发送消息并检查服务器是否收到它。
-
@Supun De Silva,我试过了,还是不行。
-
@LuisSerra 您可以考虑使用Wireshark 来查看通过(虚拟环回)线路实际发送的内容。这可能会帮助您缩小问题的确切范围。