getstream()永远不会返回

本文关键字:返回 永远 getstream | 更新日期: 2023-09-27 18:07:11

真的很困惑。我能够将TCPClient异步连接到tcp服务器。在我的回调中,我现在想开始读取一些数据,但是当我执行stream = tcpClient.GetStream();时,我的程序并没有完全挂起,它什么也不做。它不会转到方法的下一行,但UI仍在运行(它是Unity,可能是多线程或其他东西)。

public void SetupSocket() {
        try {
            tcpClient = new TcpClient(host, port);
            tcpClient.BeginConnect(host, port, ConnectCallback, tcpClient);
        }
        catch (Exception e) {
            // stuff happens
            return;
        }
    }
private void ConnectCallback(IAsyncResult result) {
    if (ConnectedToServer != null)
        ConnectedToServer(this, new ServerEventArgs("Connected to server."));
    Debug.Log("Where am I?"); // it does get here
    try {
        stream = tcpClient.GetStream();
    }
    catch (InvalidOperationException e){
        Debug.Log(e); // no exception
    }

    Debug.Log("Hello?"); // never gets here
    BeginReadData();
}

public void BeginReadData() {
    Debug.Log(stream.CanRead); // No log here!
     if (stream.CanRead) {
            stream.BeginRead(tcpStateObject.buffer, 0, tcpStateObject.bufferSize, EndReadData, stream);
    }
}

我在这一点上真的迷路了。我可以在我的服务器上看到我连接了,当我断开时。我向客户端发送两条消息。它曾经使用同步套接字,但我想要异步。

getstream()永远不会返回

答案如下

我连接了两次

        tcpClient = new TcpClient(host, port);
        tcpClient.BeginConnect(host, port, ConnectCallback, tcpClient);