c# BeginConnect回调在未连接时被触发

本文关键字:连接 BeginConnect 回调 | 更新日期: 2023-09-27 18:18:39

使用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# BeginConnect回调在未连接时被触发

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

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