未连接时会触发C#BeginConnect回调

时间:2015-10-21 00:58:29

标签: c# tcp

即使客户端没有任何连接,使用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。

1 个答案:

答案 0 :(得分:1)

当连接操作完成时,无论是否成功连接到端点或失败,都会调用传递给BeginConnect的回调。

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