.NETPortableClassLibraryandUDPSupport我正在为PhilipsHueLights写一个C#库。我正在尝试在.NETportable中编写一个基本API包装器,以便我可以将这个库重新用于各种平台,例如Windows8/RT/WP。API本身使用RESToverHTTP,因此HttpWebRequest将满足我的大部分需求。可以使用SSDPoverUDP发现控制灯本身的桥。但是,我找不到在可移植类库(PCL)中使用UDP套接字的方法。没有可用的System.Net.Sockets。System.Net命名空间中没有任何内容允许它。我在Windows.Networking.Sockets中看到一个DatagramSocket,但在Intellisense中看不到该命名空间。有谁知道如何在.NETPCL下获得SSDP的UDP功能?我真的不想将发现功能与核心库分开。现在我的目标是.NET4.5+SL5+WP8+.NETforWindowsStore。我的印象是插座仍然可用。WinRT和WPF应用程序之间的套接字支持没有共同的交点,因此在以它们为目标的PCL项目中不可用。我有一个用于与UDP发现网络交互的WPF和WinRT的PCL库,我想出的最干净的实现涉及在PCL库中创建一个IUDPSocket接口,该接口定义发送/接收数据并连接到多播组的成员。WPF应用程序使用System.Net.Sockets.Socket实现我的IUDPSocket,而RT应用程序使用Windows.Networking.Sockets.DatagramSocket实现此功能。我的发现网络客户端类(在PCL项目中定义)的构造函数接受一个用于创建IUDPSocket实例的委托。我这样做而不是传递初始化的IUDPSocket实例,因此调用代码不必知道涉及哪个端口或地址。如这篇MSDN文章中所述,PCL仅限于目标平台通用的程序集:在可移植类库项目中,您可以指定要定位的平台,并且仅引用项目中这些平台支持的程序集。如果您尝试引用目标平台不支持的程序集,VisualStudio将警告您不兼容。所有平台都支持核心程序集(mscorlib.dll、System.dll、System.Core.dll和System.Xml.dll)。正如一篇文章的总结表中提到的,网络类库(NCL)在除XBox360之外的所有平台上都得到支持。进一步阅读提供了以下信息:当您在可移植类库项目中指定目标平台时,这些平台支持的程序集将在项目中自动引用。您不必添加或删除程序集。如果目标平台发生更改,引用的程序集会自动更新。因此,您可能在项目创建期间选择了每个平台。禁用XBox360应该会为您提供对NCL和UdpClient的支持。但是,如果您还需要对Xbox360的支持,您有两个选择:选择非PCL的项目类型或手动实现UDP支持。以上就是《C#学习教程:.NETPortableClassLibraryandUDPSupport》分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
