【问题标题】:TCPListener and StreamSocketTCPListener 和 StreamSocket
【发布时间】:2018-10-07 02:21:44
【问题描述】:

我有一个奇怪的问题。我正在尝试建立从本地 PC 到远程 hololens 的 TCP 连接。在 PC 上,我使用标准 C# API(TCPClient、TCPListener),而在 Hololens 上,我不得不使用 UWP 的东西(StreamSocket、StreamSocketListener)。

我已经测试了以下配置:

StreamSocket(本地 PC) StreamSocketListener(Hololens):工作

StreamSocketListener(本地 PC) StreamSocket(Hololens):工作

TCPClient(本地 PC) StreamSocketListener(Hololens):工作

TCPClient(本地 PC) TCPListener(也是本地客户端):工作

但是!

TCPListener(本地 PC) StreamSocket(Hololens):不工作!

更令人困惑!

TCPListener(本地 PC) StreamSocket(作为本地 PC 上的 UWP 应用程序):工作! (即使默认情况下 localhost 应该被 UWP API 阻止)

这是否以某种方式明确禁止?有没有办法解决它?不确定我是否应该显示代码,它是典型的、最小的,并且是从文档引用中复制粘贴的。

因此,由于某种原因,我的 Hololens 无法启动与 PC 的联系,但反之亦然(Hololens 上的 StreamSocketListener,PC 上的 TCPClient)。

有一个相关的问题在

Can't use StreamSocket to connect to a TcpListener

但我没有通过 localhost 进行测试。我正在 Hololens 和 PC 之间进行测试。

TCPListener 的用法如下所示:

var connectionListener = new TcpListener(localAddress, port);
connectionListener.Start();
connectionListener.BeginAcceptTcpClient(AcceptTCPClient, connectionListener);

//somewhere else
private void AcceptTCPClient(IAsyncResult result)
        {

            var client = connectionListener.EndAcceptTcpClient(result);

            OnConnectEvent(client); //custom callback, registered somewhere outside

            connectionListener.BeginAcceptTcpClient(AcceptTCPClient, connectionListener); //accept next client
        }

也许还相关,StreamSocket 的使用:

//this all happens in a separate thread.
var networkSocket = new StreamSocket();

 while (!IsConnected)
            {
                try
                {
                    await networkSocket.ConnectAsync(new HostName("192.168.0.101"), "7777");
                    //do stuff with socket here
                }
                catch (Exception e)
                {
                    //errorhandling here
                }
            }

我应该注意每个本地网络地址都有单独的 TCPListeners。

【问题讨论】:

  • 您链接的答案中的“请注意,即使本地网络访问默认关闭”又如何?我猜你的 hololens 在本地网络中。
  • TCP 客户端/侦听器不会自动打开流。您是否在代码中的 TCPListener 中打开了一个流?
  • “典型的、最小的和从文档参考中复制粘贴。” - 但是,即使我们偶然发现了相同的文档引用,我们将您拥有的相同程序放在一起的几率有多大?
  • @Evk 哦,可能是这样,我不知何故将其误读为 localhost。不能完全解释为什么与 Hololens Listening 的联系会奏效。
  • @Evk 没关系,我已经在清单中获得了所需的权限。

标签: c# uwp tcpclient tcplistener hololens


【解决方案1】:

通过配置TcpListener 来监听任何 IP 地址解决了同样的问题。

IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, ConnectionPort);
networkListener = new TcpListener (ipEndPoint);
networkListener.Start (10);

【讨论】:

    猜你喜欢
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 2017-03-14
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多