网络MQ;从 C# 发送消息,使用 Py 接收,有限状态机



我试图从 C# 程序到 python 脚本进行基本消息传输,我认为我有一个状态机不匹配 - 请求澄清。 我的 python 脚本是更大系统的一部分,无法更改;我需要让我的 C# 使用它。 我收到一个 Rep.XSend 有限状态机异常。

这是蟒蛇:

import zmq
# Create the context and subscriber
context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect("tcp://localhost:5556")
# Create a poller
poller = zmq.Poller()
poller.register(socket, zmq.POLLIN)
# Filter socket output
print("Receiving messages on all topics.")
socket.setsockopt_string(zmq.SUBSCRIBE, "")
try:
while True:
# Poll the subscriber, add a timeout so script doesn't hang
events = poller.poll(1000)
for event in events:
recvd = event[0].recv_multipart()
topic = recvd[0]
msg = recvd[1:]
topic = topic.decode("utf-8")
msg_stat.process_message(topic, msg)
except KeyboardInterrupt:
print("W: interrupt received, stopping...")
finally:
# Clean up.
socket.close()
context.term()

这是 C#:

class Program
{
public static string IP { get; protected set; }
public static string Port { get; protected set; }
public static string Address { get { return "tcp://" + IP + ":" + Port; } }

static void Main(string[] args)
{
string msg = "";
IP = "127.0.0.1";
Port = "5556";
AsyncIO.ForceDotNet.Force();
ResponseSocket server = new ResponseSocket();
try
{
server.Bind(Address);
Console.WriteLine("Started Server " + Address);
}
catch (System.Exception)
{
Console.WriteLine("Failed to Bind Server to " + Address);
NetMQConfig.Cleanup(false);
return;
}
server.SendFrame(msg);
}
}

谢谢!

您正在使用 ResponseSocket 发送消息。ResponseSocket 是一个先接收消息,然后发送响应消息的套接字。您可以尝试其他套接字,例如RequestSocket 代替或 RouterSocket

最新更新