我真的困惑。我可以异步连接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);
}
}
我真的迷失了。我可以在我的服务器上看到我连接,当我断开连接时。我向客户端发送了两条消息。它曾经用于同步套接字,但我想要异步。
答案 0 :(得分:0)
以下是答案
我连接了两次
tcpClient = new TcpClient(host, port);
tcpClient.BeginConnect(host, port, ConnectCallback, tcpClient);