即使客户端没有任何连接,使用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。
答案 0 :(得分:1)
当连接操作完成时,无论是否成功连接到端点或失败,都会调用传递给BeginConnect
的回调。
在BeginConnect
回调中,您需要使用收到的EndConnect
对象调用IAsyncResult
,以便完成连接操作。在调用EndConnect
之前,套接字不可用;之后,如果套接字连接成功,则可以继续读写。