C# Universal Windows StreamSocket 客户端未连接到 StreamSocketListener 服务器
C# Universal Windows StreamSocket clients not connecting to StreamSocketListener server
我正在尝试使用 C# 和 UWP 编写一个简单的套接字服务器。到目前为止,我已经用 C# 编写了一个 SocketServer class,你可以 subclass;我希望它像 Node.js.
中的套接字服务器
但是,我尝试从 Python REPL 和 C# 客户端连接到此服务器,但两次连接都超时。我将我的代码与 Microsoft 在 Github 上的 StreamSocket 示例进行了比较,但我无法弄清楚我做错了什么。不知道是我的代码有问题还是我电脑的某些网络配置有问题。
这是我的超级服务器class:
...
abstract class SocketServer
{
public SocketServer()
{
}
public async void Listen(String port)
{
StreamSocketListener serverSocket = new StreamSocketListener();
await serverSocket.BindServiceNameAsync("8003");
serverSocket.ConnectionReceived += ClientConnectionReceived;
Debug.WriteLine("Server started");
}
private void ClientConnectionReceived(
StreamSocketListener sender,
StreamSocketListenerConnectionReceivedEventArgs args)
{
Debug.WriteLine("Client connection received");
OnConnection(args.Socket);
DataReader reader = new DataReader(args.Socket.InputStream);
try
{
// fill in later
}
catch
{
// fill in later
}
}
abstract protected void OnConnection(StreamSocket socket);
abstract protected void OnData(String data);
abstract protected void OnEnd();
}
}
这是该服务器的子class:
class Subclass: SocketServer
{
override protected void OnConnection(StreamSocket socket)
{
Debug.WriteLine("Got connection");
}
override protected void OnData(String data)
{
}
override protected void OnEnd()
{
}
}
这是实例化服务器的代码(在 App.xaml.cs 中):
public App()
{
...
Debug.WriteLine("==========================");
Subclass manager = new Subclass();
manager.Listen("8003");
}
最后,这是 C# 客户端代码(在 App.xaml.cs 中):
public App()
{
...
Debug.WriteLine("========================");
StartClient();
}
async void StartClient()
{
try
{
Debug.WriteLine("About to connect");
StreamSocket socket = new StreamSocket();
Debug.WriteLine("Made StreamSocket");
await socket.ConnectAsync(new HostName("localhost"), "8003");
Debug.WriteLine("Connected");
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
Exit();
}
}
它打印"About to connect"和"Made SocketStream",但过了一会儿出现超时错误。
我做错了什么?
您是从另一台机器连接的吗?您不能从同一台计算机上的另一个应用程序或进程 运行ning 连接到 StreamSocketListener,即使使用 loopback exemption 也是如此。您将需要 运行 客户端在另一台机器上。
我正在尝试使用 C# 和 UWP 编写一个简单的套接字服务器。到目前为止,我已经用 C# 编写了一个 SocketServer class,你可以 subclass;我希望它像 Node.js.
中的套接字服务器但是,我尝试从 Python REPL 和 C# 客户端连接到此服务器,但两次连接都超时。我将我的代码与 Microsoft 在 Github 上的 StreamSocket 示例进行了比较,但我无法弄清楚我做错了什么。不知道是我的代码有问题还是我电脑的某些网络配置有问题。
这是我的超级服务器class:
...
abstract class SocketServer
{
public SocketServer()
{
}
public async void Listen(String port)
{
StreamSocketListener serverSocket = new StreamSocketListener();
await serverSocket.BindServiceNameAsync("8003");
serverSocket.ConnectionReceived += ClientConnectionReceived;
Debug.WriteLine("Server started");
}
private void ClientConnectionReceived(
StreamSocketListener sender,
StreamSocketListenerConnectionReceivedEventArgs args)
{
Debug.WriteLine("Client connection received");
OnConnection(args.Socket);
DataReader reader = new DataReader(args.Socket.InputStream);
try
{
// fill in later
}
catch
{
// fill in later
}
}
abstract protected void OnConnection(StreamSocket socket);
abstract protected void OnData(String data);
abstract protected void OnEnd();
}
}
这是该服务器的子class:
class Subclass: SocketServer
{
override protected void OnConnection(StreamSocket socket)
{
Debug.WriteLine("Got connection");
}
override protected void OnData(String data)
{
}
override protected void OnEnd()
{
}
}
这是实例化服务器的代码(在 App.xaml.cs 中):
public App()
{
...
Debug.WriteLine("==========================");
Subclass manager = new Subclass();
manager.Listen("8003");
}
最后,这是 C# 客户端代码(在 App.xaml.cs 中):
public App()
{
...
Debug.WriteLine("========================");
StartClient();
}
async void StartClient()
{
try
{
Debug.WriteLine("About to connect");
StreamSocket socket = new StreamSocket();
Debug.WriteLine("Made StreamSocket");
await socket.ConnectAsync(new HostName("localhost"), "8003");
Debug.WriteLine("Connected");
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
Exit();
}
}
它打印"About to connect"和"Made SocketStream",但过了一会儿出现超时错误。
我做错了什么?
您是从另一台机器连接的吗?您不能从同一台计算机上的另一个应用程序或进程 运行ning 连接到 StreamSocketListener,即使使用 loopback exemption 也是如此。您将需要 运行 客户端在另一台机器上。