//异步创建网络连接 private static void MyConnectAsyncInternal(this EndPoint remoteEndPoint, MyConnectedCallback callback, object state) { if (remoteEndPoint is DnsEndPoint) { var dnsEndPoint = (DnsEndPoint)remoteEndPoint; var asyncResult = Dns.BeginGetHostAddresses(dnsEndPoint.Host, MyOnGetHostAddresses, new DnsConnectState { Port = dnsEndPoint.Port, Callback = callback, State = state }); if (asyncResult.CompletedSynchronously) { MyOnGetHostAddresses(asyncResult); } } else { var e = MyCreateSocketAsyncArgs(remoteEndPoint, callback, state); var socket = new Socket(remoteEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); e.AcceptSocket = socket; socket.BeginConnect(remoteEndPoint, new AsyncCallback(MyConnectionCallback), e); } }
//创建自定义连接参数 static MySocketAsyncArgs MyCreateSocketAsyncArgs(EndPoint remoteEndPoint, MyConnectedCallback callback, object state) { var e = new MySocketAsyncArgs(); e.State = state; e.Callback = callback; e.RemoteEndPoint = remoteEndPoint; return(e); }
public static void MyConnectAsync(this EndPoint remoteEndPoint, MyConnectedCallback callback, object state) { MyConnectAsyncInternal(remoteEndPoint, callback, state); }