【问题标题】:Why must StreamSocketListener be used in UWP instead of TcpListener, although UWP is a subset of .NET Core and TcpListener is available in UWP?为什么必须在 UWP 中使用 StreamSocketListener 而不是 TcpListener,尽管 UWP 是 .NET Core 的子集,而 TcpListener 在 UWP 中可用?
【发布时间】:2019-12-13 20:50:38
【问题描述】:

herehere 所述,TcpListener 的使用在 UWP 中是不可能的。相反,必须使用 StreamSocketListener。

但是经过比较长时间的研究,我不明白为什么?

由于 UWP 实际上是 .NET Core 的子集,因此在 UWP 中也应该可以使用 TcpListener!

只是为了测试,我 甚至创建了一个 UWP 项目,尝试使用 System.Net.Sockets.TcpListener 在代码中,没有问题。我没有写完整的代码 并没有尝试运行服务器,只是尝试引用 System.Net.Sockets.TcpListener 来自 UWP 项目,这是 可能的。难怪,因为即使根据微软文档 (https://docs.microsoft.com/en-us/dotnet/api/system.net.sockets.tcplistener?view=netcore-1.0) 该类从 .NET Core 1.0 开始可用。

【问题讨论】:

  • “UWP 实际上是 .NET Core 的一个子集”是另一个典型的误解。尽管 UWP/.NET Core 共享许多共同部分,但它们是不同的目标平台,这就是为什么只有 .NET Standard 才能将它们桥接在一起。
  • 哦!那么这张图是不是错了i.stack.imgur.com/nl9gf.png
  • 您可能会参考最新的图表,例如devblogs.microsoft.com/dotnet/introducing-net-5 您不应该期望图表总是能说出所有真相,因为作者可能只是懒得为 UWP 单独绘制一个矩形。
  • 好吧,实际上我并不仅仅依赖于图表,我在这里的答案中遇到了图表:stackoverflow.com/a/53531324/9514066 那里的人明确表示 UWP 是 .NET Core 的子集,他故意用图表来说明他的观点
  • 那么很明显,这个答案立即被质疑具有误导性,并且微软在他们以后的官方博客文章中不再使用这样的图表。

标签: c# sockets websocket uwp windows-networking


【解决方案1】:

较新版本的 UWP 支持 .NET Standard 2.0,其中包括许多在早期版本的 UWP 中不可用的 API。

参见例如:https://devblogs.microsoft.com/dotnet/announcing-uwp-support-for-net-standard-2-0/

【讨论】:

  • 根据文档(查看我在问题中提到的链接),TcpListener 适用于:.NET Core 1.0。这意味着,它应该在所有 UWP 版本中都可用
  • @user9514066 你误解了那个页面。当您使用 UWP 时,唯一适用的项目是“.NET Standard”,这意味着如果您的项目目标的 UWP 版本已经实现了某个 .NET Standard 版本,那么TcpListener 应该可以完美地在那里工作。
猜你喜欢
  • 1970-01-01
  • 2018-10-23
  • 2018-08-15
  • 1970-01-01
  • 2011-02-25
  • 2016-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多