C# 通用 Windows StreamSocket 客户端未连接到 StreamSocketListener 服务器

标签 c# sockets server uwp

我正在尝试使用 C# 和 UWP 编写一个简单的套接字服务器。到目前为止,我已经用 C# 编写了一个可以子类化的 SocketServer 类;我希望它像 Node.js 中的套接字服务器。

但是,我曾尝试从 Python REPL 和 C# 客户端连接到此服务器,但两次连接都超时。我将我的代码与 Microsoft 在 Github 上的 StreamSocket 示例进行了比较,但我无法弄清楚我做错了什么。我不知道这是我的代码问题还是我计算机上某些网络配置的问题。

这是我的服务器父类(super 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 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”,但过了一会儿出现超时错误。

我做错了什么?

最佳答案

您是从另一台机器连接的吗?您无法从同一台计算机上运行的另一个应用程序或进程连接到 StreamSocketListener,即使使用 loopback exemption 也是如此。 .您需要在另一台机器上运行客户端。

关于C# 通用 Windows StreamSocket 客户端未连接到 StreamSocketListener 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33622546/

相关文章:

c# - 如何创建类型 <T1, T2> 的列表,其中 T1 和 T2 可以包含多种类型?

c# - 替换时忽略特定出现的字符串

linux - 从多个线程在套接字上发送 Recv

Java 将数据从服务器发送回客户端

node.js - 是否可以不向人们正在测试我的 Node/express 站点的 URL 发送响应?

C# 如何缩短这个超长的重载 do while 语句

c# - 打开 rdlc 报告时在报告查看器中手动设置值

c# - 在我的C#客户端中接收意外的udp数据包

sockets - 操作系统如何知道使用哪个网络接口(interface)来连接互联网?

multithreading - 使用多线程,用C语言搭建一个简单的HTTP服务器