我正在尝试通过 ZeroMQ 在 ac#(5.0) 和 python (3.9) 应用程序之间进行通信。对于.Net,我使用 NetMQ 和 python PyZMQ。
只要两个应用程序使用相同的语言,我就可以毫无问题地进行通信
- c# 应用程序到 c# 应用程序;
- 蟒蛇->蟒蛇;
- 爪哇->爪哇,
但是当我尝试在不同语言之间建立联系时,麻烦就开始了。
- java -> c# 和 reverse 也可以正常工作[编辑]
我没有收到任何错误,但它也不起作用。
我首先尝试了PUB-SUB
Archetype 模式,但由于它不起作用,所以我尝试了,所以仍然可以在代码中找到“PUB-SUB”版本REQ-REP
的一些剩余部分。
我的 Python 代码如下所示:
def run(monitor: bool):
loop_counter: int = 0
context = zmq.Context()
# socket = context.socket(zmq.PUB)
# socket.bind("tcp://*:5557")
socket = context.socket(zmq.REP)
socket.connect("tcp://localhost:5557")
if monitor:
print("Connecting")
# 0 = Longest version, 1 = shorter version, 2 = shortest version
length_version: int = 0
print("Ready and waiting for incoming requests ...")
while True:
message = socket.recv()
if monitor:
print("Received message:", message)
if message == "long":
length_version = 0
elif message == "middle":
length_version = 1
else:
length_version = 2
sys_info = get_system_info(length_version)
"""if not length_version == 2:
length_version = 2
loop_counter += 1
if loop_counter == 15:
length_version = 1
if loop_counter > 30:
loop_counter = 0
length_version = 0"""
if monitor:
print(sys_info)
json_string = json.dumps(sys_info)
print(json_string)
socket.send_string(json_string)
我的 C# 代码:
static void Main(string[] args)
{
//using (var requestSocket = new RequestSocket(">tcp://localhost:5557"))
using (var requestSocket = new RequestSocket("tcp://localhost:5557"))
{
while (true) {
Console.WriteLine($"Running the server ...");
string msg = "short";
requestSocket.SendFrame(msg);
var message = requestSocket.ReceiveFrameString();
Console.WriteLine($"requestSocket : Received '{message}'");
//Console.ReadLine();
Thread.Sleep(1_000);
}
}
}