TCPListener和StreamSocket

时间:2018-04-26 11:39:46

标签: c# uwp tcpclient tcplistener hololens

我有一个奇怪的问题。我正在尝试从我的本地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应用程序):工作! (即使默认情况下应该通过UWP API阻止localhost)

这是明确禁止的吗?它有办法吗?不确定我是否应该显示代码,它是典型的,最小的,并且是从文档引用中复制的。

因此,由于某些原因,我的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
                }
            }

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

1 个答案:

答案 0 :(得分:1)

通过配置TcpListener来监听任何 IP地址,可以解决相同的问题。

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