python中未接收到使用C#UWP中的PublisherSocket发布消息

python中未接收到使用C#UWP中的PublisherSocket发布消息,c#,uwp,zeromq,pyzmq,netmq,C#,Uwp,Zeromq,Pyzmq,Netmq,我正试图用C#UWP中的NetMQ将消息传递给python python充当订阅者,C#充当发布者 当我使用C#.Net内核时,我可以看到消息到达python订阅服务器,但当我使用C#UWP时,什么也没有发生,尽管代码完全相同,我可以看到Publisher正在发送消息 python中的代码:(工作) Net内核中的代码:(正在运行) 使用系统线程; 使用System.Threading.Tasks; 使用NetMQ; 使用NetMQ.Sockets; 名称空间示例 { 静态部分类程序 { 公共静

我正试图用C#UWP中的NetMQ将消息传递给python

python充当订阅者,C#充当发布者

当我使用C#.Net内核时,我可以看到消息到达python订阅服务器,但当我使用C#UWP时,什么也没有发生,尽管代码完全相同,我可以看到Publisher正在发送消息

python中的代码:(工作)

Net内核中的代码:(正在运行)

使用系统线程;
使用System.Threading.Tasks;
使用NetMQ;
使用NetMQ.Sockets;
名称空间示例
{
静态部分类程序
{
公共静态void Main(字符串[]args)
{
出版商();
}
公共静态void Publisher()
{
Task.Run(异步()=>
{
使用(var pubSocket=new PublisherSocket())
{
绑定(“tcp://*:6789”);
对于(变量i=0;i<10;i++)
{
SendFrame(“abcde”+i.ToString());
睡眠(1000);
}
}
});
}
}
}
但UWP中的代码(不工作):

使用NetMQ;
使用NetMQ.Sockets;
使用系统线程;
使用System.Threading.Tasks;
使用Windows.UI.Xaml;
使用Windows.UI.Xaml.Controls;
使用制度;
名称空间测试\u NetMQ\u UWP
{
公共密封部分类主页面:第页
{
公共主页()
{
初始化组件();
DataContext=this;
}
//单击MainPage.xaml中的按钮时发生此事件
私有无效发布者\u单击(对象发送者,路由目标)
{
Task.Run(异步()=>
{
使用(var pubSocket=new PublisherSocket())
{
绑定(“tcp://*:6789”);
对于(变量i=0;i<10;i++)
{
SendFrame(“abcde”+i.ToString());
睡眠(1000);
}
}
});
}
}
}

我做错了什么?这是正常的行为。您正在使用IP环回地址进行UWP应用程序和不同进程(不同UWP应用程序或桌面应用程序)之间的网络通信。这受到网络隔离的限制

您可以在不同的计算机上运行服务器和客户端进行测试。请看文件。它解释了这种情况:

环回仅允许用于开发目的。不允许安装在Visual Studio之外的Windows运行时应用程序使用。此外,Windows运行时应用程序只能将IP环回用作客户端网络请求的目标地址。因此,使用DatagramSocket或StreamSocketListener侦听IP环回地址的Windows运行时应用程序无法接收任何传入数据包

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


请注意,因为您的UWP应用程序需要在运行时访问网络,所以您需要在Package.appxmanifest文件中启用Netwrok功能(
Internet(客户端)
Internet(客户端和服务器)
Private Networks(客户端和服务器)
socket.setsockopt(zmq.SUBSCRIBE,topicfilter)
zmq选项,在Python代码中,必须在连接之前放置,请尝试。谢谢,但这并不能解决问题。嗨,谢谢,所以在同一台机器中没有办法解决这个问题?(我所说的“绕开”是指在同一台机器上从UWP和python发送消息)。@Izik没有办法。
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()
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);
                    }
                }

            });

        }

    }
}
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);
                    }
                }

            });
        }
    }
}