【问题标题】:async CTP AcceptTcpClientAsync method异步 CTP AcceptTcpClientAsync 方法
【发布时间】:2011-10-20 21:41:07
【问题描述】:

我正在试验 C# 异步 CTP 库和套接字服务器。我正在尝试使用添加到System.Net.Sockets.TcpListener 类的扩展方法AcceptTcpClientAsync 来监听连接。我的代码如下所示:

  ...
        TcpListener listener = new TcpListener(IPAddress.Any, ServerPort);
        listener.Start();

        while (_active)
        {
            TcpClient client = await listener.AcceptTcpClientAsync();
            AddConnection(client);
        }

        listener.Stop();

  ...

但是,如果我在 AddConnection 处设置断点,它永远不会被命中。我使用正确吗?

【问题讨论】:

    标签: c# asynchronous tcplistener


    【解决方案1】:

    这对我来说看起来不错 - 只有当某些东西尝试实际连接时,您才应该到达断点。听起来像一个愚蠢的问题,但是 - 有什么联系吗?如果是这样,当它尝试时会发生什么?

    【讨论】:

    • 嗯,如果我通过调用代码遵循断点,它会成功打开连接并发送数据,但永远不会得到响应。但是,当它打开它的连接时,上面代码中的 await 语句没有返回!如果我用这个gist.github.com/1127577 替换该代码,一切正常。很奇怪。
    • @Ceilingfish:这是一个什么样的应用程序?安慰?表格? WPF?你能发布一个简短但完整的程序来演示这个问题吗?
    • 这是一个 Winforms 应用程序。我在这里做了一个示例应用程序:github.com/ceilingfish/AsyncBlockingTcpListenerBug
    • 我遇到了完全相同的事情。我在 WPF(带有 gui)和 TcpClient client = await listener.AcceptTcpClientAsync() 之后的行中构建服务器;永远不会被我的断点击中。另外,我的服务器已关闭,因此我无法建立任何连接。有人找到解决方案了吗?
    • @Andrey-WD:是的,但仅凭这些信息很难判断。 (这些天我当然不会添加这样的答案。)我建议您使用minimal reproducible example 提出一个新问题。
    猜你喜欢
    • 2011-11-07
    • 1970-01-01
    • 2012-03-04
    • 2012-02-04
    • 2011-12-10
    • 1970-01-01
    • 2011-09-20
    • 2011-08-19
    • 1970-01-01
    相关资源
    最近更新 更多