【发布时间】:2018-02-16 00:54:56
【问题描述】:
我正在移植一些 TcpListener/TcpClient/etc 代码以在 UWP 上工作。但是,在通用 windows c# 应用程序中工作的最基本操作在 UWP 下对我来说是失败的。
最基本的操作,比如等待一个TcpClient失败了:
private async Task TestTcpListening()
{
Debug.WriteLine("Creating TcpListneer");
int portNumber = 8554;
TcpListener listener = new TcpListener(IPAddress.Any, portNumber);
listener.Start();
while(true)
{
Debug.WriteLine("Waiting on TcpListener to accept client");
TcpClient client = await listener.AcceptTcpClientAsync();
Debug.WriteLine(string.Format("We got a client! {0}", client));
}
}
如果我在通用 Windows 控制台应用程序中运行此代码,当我对 localhost URL 进行挠痒痒时,“我们有一个客户端”位就会运行。如果它在 UWP 应用程序中运行,它将永远等待并且调用应用程序超时。
注意事项:
- 我在 Package.appxmanifest 中选择了 Internet(客户端和服务器)、Internet 和 Private Networks 功能
- 我正在移植一个 RTSP 服务器,它可以作为一般的 Windows 应用程序正常工作。因此,我使用的 URI 是“rtsp://localhost:8554”。当构建为命令行窗口应用程序时,将 VLC 指向该 URI 时,上述代码按预期工作。相同代码的 UWP 版本永远等待,VLC 超时。
- 我是 Windows 的新手,所以我还不知道我不知道什么。
想法:
- 我是否需要以某种方式启用对应用程序的“rtsp:”协议访问?我不希望应用程序在 rtsp: url 被点击时打开。我只想处理传入的连接。
【问题讨论】:
-
嗨 TomorrowPlusX,我想这与 UWP 不允许您在同一设备上使用 TcpListeners(服务器和客户端)这一事实有关......出于开发目的,您可以删除该限制。检查网络...我无法向您发送详细信息...抱歉
-
有关环回的详细信息已写在Using network loopback in side-loaded Windows Store apps 上。如果这确实是问题,那么您可以参考 Rob 在 here 上的帖子
-
非常感谢 - 你们两个都是正确的,这回答了我的问题。目前,我只是在网络上的另一台机器上使用 VLC 进行测试。
标签: c# uwp network-programming