簡體   English   中英

如何使用 ZeroMQ 從 C# 客戶端向 C++ 服務器發送消息

[英]How to send a message from C# client to C++ server using ZeroMQ

我正在制作一個適用於三個不同部分的應用程序。 一台服務器運行在 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 # 端,假設您已成功連接並發送消息,但服務器沒有反映任何更改(就像您沒有接到電話一樣)。

可能是什么原因?

對於 c#,我使用了 NetMQMessage。 這對你更有效嗎? 我使用其他選項(沒有逗留和超時)

using (var client = new RequestSocket()) {
  
   client.Connect("tcp://192.168.1.216:8000");

   NetMQMessage msg = new NetMQMessage();
   msg.Append("my request string buffer", Encoding.UTF8);
   client.SendFrame(msg.ToString());

   var res_bytes = client.ReceiveFrameBytes();
   // add some function to transform bytes to string

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM