TCPListener 和 StreamSocket
TCPListener and StreamSocket
我有一个奇怪的问题。我正在尝试建立从本地 PC 到远程全息镜头的 TCP 连接。在 PC 上,我使用标准的 C# APIs(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
但我没有在本地主机上进行测试。我正在 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。
通过配置 TcpListener
侦听 任何 IP 地址解决了同样的问题。
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, ConnectionPort);
networkListener = new TcpListener (ipEndPoint);
networkListener.Start (10);
我有一个奇怪的问题。我正在尝试建立从本地 PC 到远程全息镜头的 TCP 连接。在 PC 上,我使用标准的 C# APIs(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
但我没有在本地主机上进行测试。我正在 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。
通过配置 TcpListener
侦听 任何 IP 地址解决了同样的问题。
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, ConnectionPort);
networkListener = new TcpListener (ipEndPoint);
networkListener.Start (10);