【问题标题】:C# to Python messagingC# 到 Python 的消息传递
【发布时间】: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 我同意这一点;当然绑定实现可能会导致问题。

标签: python c# zeromq


【解决方案1】:

我在本地机器上运行您的代码,但无法重现您的问题 - 客户端和服务器之间的交互工作正常。

一句话,这段代码:

Console.ReadKey();

应该从服务器端移除。


我会推荐:

  • 确保一切都在本地计算机上运行
  • 检查客户端端口5555是否可用(未被防火墙等阻止)。可以使用 telnet 实用程序对其进行测试:
telnet 192.168.1.14 5555

【讨论】:

  • 谢谢弗拉基米尔。因此,在我重新启动运行服务器代码的计算机后,它就可以工作了。我一直在尝试重现错误行为,但到目前为止一直没有成功。所以不确定我做错了什么。你能详细说明为什么我不应该在服务器端使用 Console.ReadKey() 吗?
  • 而且,我几乎可以肯定问题不是因为端口繁忙或防火墙,如果再次发生,我会尝试调试它,看看有什么问题并在这里发布结果跨度>
  • 服务不应通过控制台与任何用户交互,它不是客户端应用程序(考虑使用消息队列传递一些命令等)。所以调用 Console.ReadKey(); 看起来很可疑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-11
  • 1970-01-01
  • 2012-08-02
  • 1970-01-01
相关资源
最近更新 更多