[英]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.