【发布时间】:2020-12-28 16:50:27
【问题描述】:
我想使用 ZeroMQ 在树莓派上的 python 程序与 C# 之间发送和接收非常简单的数据(无论何种形式)。对于我的服务器端,我使用以下 C# 代码:
using System;
using System.Threading;
using NetMQ;
using NetMQ.Sockets;
namespace NetMQServer
{
class Program
{
static void Main(string[] args)
{
using (var server = new ResponseSocket())
{
server.Bind("tcp://*:5555");
while (true)
{
Console.ReadKey();
var message = server.ReceiveFrameString();
Console.WriteLine("Received {0}", message);
// processing the request
Console.WriteLine("Sending World");
server.SendFrame("World");
}
}
}
}
}
在客户端(python)我使用以下代码:
import zmq
context = zmq.Context()
socket = context.socket(zmq.REQ)
socket.connect("tcp://192.168.1.14:5555")
for i in range(0, 10):
print("Sending Hello")
socket.send_string("Hello")
msg = socket.recv_string()
print("recieved ", msg)
print("")
两个程序都运行,但它不会在控制台中打印任何内容,就好像它们没有连接一样。我已经在客户端和服务器上使用相同的语言和上面完全相同的代码进行了尝试,它可以工作。
【问题讨论】:
-
通过 ZeroMQ 进行通信;为什么语言很重要?您需要用 what 不起作用的详细信息来澄清您的问题,将其隔离到客户端或服务器,并使用您遇到问题的语言发布可重现的示例。请改进您的问题。
-
@CoolBots 这就是我要问的。因为当双方都是 python 或 C# 时,相同的代码适用。但在上述情况下,程序运行没有错误,但没有任何内容打印到屏幕上。
-
语言无关紧要;事实上,一方不可能弄清楚另一方是用什么语言编写的。工作示例和失败示例之间的实现可能存在差异。你需要弄清楚问题是什么。 “什么都没有打印......”不是技术描述 - 使用日志记录甚至断点来确定消息是否正在发送,但没有收到,或者根本没有发送等等。但这与客户端使用的语言无关/服务器。
-
@CoolBots - 恕我直言,我可以确认,语言确实很重要(本身并不重要,但由于它们的 ZeroMQ 绑定并不总是足够好地遵循本机 ZeroMQ API,因此结果是这种方式取决于使用什么语言/包装器/绑定来组装/反汇编 ZMTP 定义的 ZeroMQ 消息...)从这个意义上说,我必须支持 O/P 关于尝试与什么通信的措辞。
-
@user3666197 我同意这一点;当然绑定实现可能会导致问题。