NetworkStream.GetStream()永远不会返回

时间:2015-08-11 03:40:56

标签: c# sockets unity3d tcp

真的困惑。我可以异步连接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);
    }
}

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

1 个答案:

答案 0 :(得分:0)

以下是答案

我连接了两次

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