public void connectTo(string ip, int port, ConnectCallback callback, object userData)
        {
            if (valid())
            {
                throw new InvalidOperationException("Have already connected!");
            }

            if (!(new Regex(@"((?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))))")).IsMatch(ip))
            {
                IPHostEntry ipHost = Dns.GetHostEntry(ip);
                ip = ipHost.AddressList[0].ToString();
            }

            _socket = createSocket();

            ConnectState state = new ConnectState();

            state.connectIP        = ip;
            state.connectPort      = port;
            state.connectCB        = callback;
            state.userData         = userData;
            state.socket           = _socket;
            state.networkInterface = this;

            Dbg.DEBUG_MSG("connect to " + ip + ":" + port + " ...");
            connected = false;

            // 先注册一个事件回调,该事件在当前线程触发
            Event.registerIn("_onConnectionState", this, "_onConnectionState");

            var v = new AsyncConnectMethod(this._asyncConnect);

            v.BeginInvoke(state, new AsyncCallback(this._asyncConnectCB), state);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 在非主线程执行:连接服务器结果回调
        /// </summary>
        private void _asyncConnectCB(IAsyncResult ar)
        {
            ConnectState       state  = (ConnectState)ar.AsyncState;
            AsyncResult        result = (AsyncResult)ar;
            AsyncConnectMethod caller = (AsyncConnectMethod)result.AsyncDelegate;

            Dbg.DEBUG_MSG(string.Format("NetWorkInterface::_asyncConnectCB(), connect to '{0}:{1}' finish. error = '{2}'", state.connectIP, state.connectPort, state.error));

            // Call EndInvoke to retrieve the results.
            caller.EndInvoke(ar);
            Event.fireIn("_onConnectionState", new object[] { state });
        }
        public void connectTo(string ip, int port, ConnectCallback callback, object userData)
        {
            if (valid())
            {
                throw new InvalidOperationException("Have already connected!");
            }

            if (!(new Regex(@"((?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))))")).IsMatch(ip))
            {
                IPHostEntry ipHost = Dns.GetHostEntry(ip);
                ip = ipHost.AddressList[0].ToString();
            }

            // Security.PrefetchSocketPolicy(ip, 843);
            IPAddress[]   hostAddresses = Dns.GetHostAddresses(ip);
            IPAddress[]   outIPs        = hostAddresses;
            AddressFamily addressFamily = AddressFamily.InterNetwork;

            if (Socket.OSSupportsIPv6 && this.IsHaveIpV6Address(hostAddresses, ref outIPs))
            {
                addressFamily = AddressFamily.InterNetworkV6;
            }
            _socket = new Socket(addressFamily, SocketType.Stream, ProtocolType.Tcp);
            _socket.SetSocketOption(System.Net.Sockets.SocketOptionLevel.Socket, SocketOptionName.ReceiveBuffer, NetworkInterface.TCP_PACKET_MAX * 2);
            _socket.SetSocketOption(System.Net.Sockets.SocketOptionLevel.Socket, SocketOptionName.SendBuffer, NetworkInterface.TCP_PACKET_MAX * 2);
            _socket.NoDelay = true;
            //_socket.Blocking = false;

            ConnectState state = new ConnectState();

            state.connectIP        = ip;
            state.connectPort      = port;
            state.connectCB        = callback;
            state.userData         = userData;
            state.socket           = _socket;
            state.networkInterface = this;

            Dbg.DEBUG_MSG("connect to " + ip + ":" + port + " ...");
            connected = false;

            // 先注册一个事件回调,该事件在当前线程触发
            Event.registerIn("_onConnectionState", this, "_onConnectionState");

            var v = new AsyncConnectMethod(this._asyncConnect);

            v.BeginInvoke(state, new AsyncCallback(this._asyncConnectCB), state);
        }
Ejemplo n.º 4
0
        public void connectTo(string ip, int port, ConnectCallback callback, object userData)
        {
            if (valid())
            {
                throw new InvalidOperationException("Have already connected!");
            }

            if (!(new Regex(@"((?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))))")).IsMatch(ip))
            {
                IPHostEntry ipHost = Dns.GetHostEntry(ip);
                ip = ipHost.AddressList[0].ToString();
            }

            // Security.PrefetchSocketPolicy(ip, 843);
            _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            _socket.SetSocketOption(System.Net.Sockets.SocketOptionLevel.Socket, SocketOptionName.ReceiveBuffer, KBEngineApp.app.getInitArgs().getRecvBufferSize() * 2);
            _socket.SetSocketOption(System.Net.Sockets.SocketOptionLevel.Socket, SocketOptionName.SendBuffer, KBEngineApp.app.getInitArgs().getSendBufferSize() * 2);
            _socket.NoDelay = true;
            //_socket.Blocking = false;

            //_udpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            //IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName());
            //_udpSocket.Bind(new IPEndPoint(host.AddressList[0], port));

            ConnectState state = new ConnectState();

            state.connectIP        = ip;
            state.connectPort      = port;
            state.connectCB        = callback;
            state.userData         = userData;
            state.socket           = _socket;
            state.networkInterface = this;

            Dbg.DEBUG_MSG("connect to " + ip + ":" + port + " ...");

            // 先注册一个事件回调,该事件在当前线程触发
            Event.registerIn("_onConnectStatus", this, "_onConnectStatus");

            var v = new AsyncConnectMethod(this._asyncConnect);

            v.BeginInvoke(state, new AsyncCallback(this._asyncConnectCB), state);
        }
        public void connectTo(string ip, int port, ConnectCallback callback, object userData)
        {
            if (valid())
                throw new InvalidOperationException("Have already connected!");

            if (!(new Regex(@"((?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))))")).IsMatch(ip))
            {
                IPHostEntry ipHost = Dns.GetHostEntry(ip);
                ip = ipHost.AddressList[0].ToString();
            }

            // Security.PrefetchSocketPolicy(ip, 843);
            _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            _socket.SetSocketOption(System.Net.Sockets.SocketOptionLevel.Socket, SocketOptionName.ReceiveBuffer, KBEngineApp.app.getInitArgs().getRecvBufferSize() * 2);
            _socket.SetSocketOption(System.Net.Sockets.SocketOptionLevel.Socket, SocketOptionName.SendBuffer, KBEngineApp.app.getInitArgs().getSendBufferSize() * 2);
            _socket.NoDelay = true;
            //_socket.Blocking = false;

            ConnectState state = new ConnectState();
            state.connectIP = ip;
            state.connectPort = port;
            state.connectCB = callback;
            state.userData = userData;
            state.socket = _socket;
            state.networkInterface = this;

            Dbg.DEBUG_MSG("connect to " + ip + ":" + port + " ...");

            // 先注册一个事件回调,该事件在当前线程触发
            Event.registerIn("_onConnectStatus", this, "_onConnectStatus");

            var v = new AsyncConnectMethod(this._asyncConnect);
            v.BeginInvoke(state, new AsyncCallback(this._asyncConnectCB), state);
        }