【问题标题】:C# BeginConnect callback is fired when not connected未连接时触发 C# BeginConnect 回调
【发布时间】:2015-10-21 09:08:33
【问题描述】:

使用tcpClient.BeginConnect 会触发异步回调,即使客户端没有可连接的内容。然后我得到一个关于尝试.GetStream() 的异常。

    public void SetupSocket() {
        try {
            tcpClient = new TcpClient();
            tcpClient.BeginConnect(host, port, ConnectCallback, tcpClient);
            Console.WriteLine("begin connect");
        }
        catch (Exception e) {
            return;
        }
    }


    private void ConnectCallback(IAsyncResult result) {
        if (OnClientEvent != null)
            OnClientEvent(this, new ClientEventArgs(Action.Connect));

        Console.WriteLine("get stream");
        stream = tcpClient.GetStream();
        Console.WriteLine("got stream");

        BeginReadAsync();
    }

输出get stream,然后在连接之前尝试在 tcpClient 上使用 GetStream 时出现异常。

【问题讨论】:

  • 您建议的超时(和其他连接异常)的替代行为是什么?您是否希望即使频道发生某些事情也永远不会调用您的回调?

标签: c# tcp


【解决方案1】:

在连接操作完成时调用传递给BeginConnect的回调,无论连接到端点成功还是失败。

BeginConnect回调中,您需要使用收到的IAsyncResult对象调用EndConnect,才能完成连接操作。在调用EndConnect 之前,套接字不可用;之后,如果socket连接成功,就可以继续读写了。

【讨论】:

    猜你喜欢
    • 2021-05-19
    • 1970-01-01
    • 2011-02-12
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    • 1970-01-01
    相关资源
    最近更新 更多