Beispiel #1
0
        // 连接到指定节点
        void HandleConnected(IAsyncResult ar)
        {
            if (!running)
            {
                return;
            }

            AsyncConnectArgs args   = ar.AsyncState as AsyncConnectArgs;
            Socket           client = args.c;

            try
            {
                client.EndConnect(ar);
                NetConnection nc = new NetConnection(client);
                lock (connections)
                    connections.Add(nc);

                nc.OnDisconnected += HandleDisconnected;
                args.nc            = nc;
                args.reason        = null;
            }
            catch (Exception ex)
            {
                args.nc     = null;
                args.reason = ex.Message;
            }

            args.done = true;
        }
Beispiel #2
0
        // 异步连接到指定网络节点
        public void Connect2Peer(string addr, int port, Action <NetConnection, string> callback, AddressFamily addrFamily = AddressFamily.InterNetwork)
        {
            running = true;
            Socket client = new Socket(addrFamily, SocketType.Stream, ProtocolType.Tcp);

            client.Blocking = true;
            AsyncConnectArgs args = new AsyncConnectArgs();

            args.c  = client;
            args.cb = callback;

            lock (connecting)
                connecting.Add(args);

            IPAddress[] ips = Dns.GetHostAddresses(addr);
            if (ips.Length == 0)
            {
                client.Close();
                return;
            }
            client.BeginConnect(ips[0], port, HandleConnected, args);
        }