gpt4 book ai didi

c# - 在 C# UWP 中使用 PublisherSocket 发布消息未在 python 中收到

转载 作者:行者123 更新时间:2023-11-30 22:55:59 25 4
gpt4 key购买 nike

我正在尝试使用 C# UWP 中的 NetMQ 将消息传递给 python。

Python 充当订阅者,C# 充当发布者。

当我使用 C# .Net Core 时,我可以看到消息到达 python 订阅者,但是当我使用 C# UWP 时,没有任何反应,尽管代码完全相同并且我可以看到 Publisher 正在发送消息。

python 中的代码:(工作)

import zmq
import time

def subscribe():
port = "6789"
context = zmq.Context()
socket = context.socket(zmq.SUB)

socket.connect("tcp://localhost:%s" % port)

topicfilter = "abcde"
socket.setsockopt(zmq.SUBSCRIBE, topicfilter)
while True:
string = socket.recv()
print string


subscribe()

.Net Core 中的代码:(工作)

using System.Threading;
using System.Threading.Tasks;
using NetMQ;
using NetMQ.Sockets;

namespace Examples
{
static partial class Program
{
public static void Main(string[] args)
{
Publisher();
}

public static void Publisher()
{
Task.Run(async () =>
{
using (var pubSocket = new PublisherSocket())
{
pubSocket.Bind("tcp://*:6789");

for (var i = 0; i < 10; i++)
{
pubSocket.SendFrame("abcde" + i.ToString());
Thread.Sleep(1000);
}
}

});

}

}
}

但是 UWP 中的代码(不工作):

using NetMQ;
using NetMQ.Sockets;
using System.Threading;
using System.Threading.Tasks;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using System;

namespace test_NetMQ_UWP
{

public sealed partial class MainPage : Page
{
public MainPage()
{
InitializeComponent();
DataContext = this;
}

// this event happen when I click on a button in MainPage.xaml
private void Publisher_Click(object sender, RoutedEventArgs e)
{
Task.Run(async () =>
{
using (var pubSocket = new PublisherSocket())
{
pubSocket.Bind("tcp://*:6789");

for (var i = 0; i < 10; i++)
{
pubSocket.SendFrame("abcde" + i.ToString());
Thread.Sleep(1000);
}
}

});
}
}
}

我做错了什么?

最佳答案

这是正常行为。你正在为 UWP 应用和不同进程(不同的 UWP 应用或桌面应用)之间的网络通信使用 IP 环回地址。这是受网络隔离的限制。

您可以在不同的机器上运行您的服务器和客户端进行测试。请看文档How to enable loopback and troubleshoot network isolation (Windows Runtime apps) .它解释了这种情况:

Loopback is permitted only for development purposes. Usage by a Windows Runtime app installed outside of Visual Studio is not permitted. Further, a Windows Runtime app can use an IP loopback only as the target address for a client network request. So a Windows Runtime app that uses a DatagramSocket or StreamSocketListener to listen on an IP loopback address is prevented from receiving any incoming packets.

在您的情况下,如果您只想测试 UWP 应用程序是否可以成功向您的 python 订阅者发送消息。您可以在另一台计算机上运行 UWP 应用程序。我用你的代码制作了一个 UWP 应用程序来发送消息,并制作了一个控制台应用程序作为订阅者,它在不同的机器上运行。控制台应用程序可以接收消息。

请注意,由于您的 UWP 应用程序需要在运行时访问网络,因此您需要启用 Netwrok 功能(Internet(Client) Internet(Client & Server) 专用网络(客户端和服务器))在 Package.appxmanifest 文件中。

关于c# - 在 C# UWP 中使用 PublisherSocket 发布消息未在 python 中收到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54790545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com