Ejemplo n.º 1
0
 private void EditConnect_Load(object sender, EventArgs e)
 {
     if (Model == null)
     {
         Model = new ConnectItem()
         {
             Key          = Guid.NewGuid().ToString("N"),
             Addtime      = DateTime.Now,
             Host         = textBox2.Text,
             KeySpace     = comboBox1.Text,
             Name         = textBox1.Text,
             PassWord     = textBox5.Text,
             Port         = int.Parse(textBox3.Text),
             SavePassWord = false,
             UserName     = textBox4.Text
         };
     }
     else
     {
     }
 }
        public bool Connect(string hostname, int port)
        {
            lock (lockerObj)
            {
                if (isConnecting)
                {
                    return(false);
                }

                isConnecting = true;
            }

            ConnectItem ci = new ConnectItem()
            {
                HostName = hostname, Port = port
            };

            ThreadPool.QueueUserWorkItem(new WaitCallback((p) =>
            {
                if (client != null)
                {
                    client.Close();
                    client = null;
                }

                bool isConnected          = false;
                IPAddress[] hostAddresses = null;
                Socket socket             = null;
                Socket socket2            = null;

                try
                {
                    hostAddresses = Dns.GetHostAddresses(hostname);
                    socket        = null;
                    socket2       = null;

                    if (this.client == null)
                    {
                        if (Socket.SupportsIPv4)
                        {
                            socket2 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                        }
                        if (Socket.OSSupportsIPv6)
                        {
                            socket = new Socket(AddressFamily.InterNetworkV6, SocketType.Stream, ProtocolType.Tcp);
                        }
                    }
                    foreach (IPAddress address in hostAddresses)
                    {
                        try
                        {
                            if (this.client == null)
                            {
                                if ((address.AddressFamily == AddressFamily.InterNetwork) && (socket2 != null))
                                {
                                    socket2.Connect(address, port);
                                    isConnected = true;
                                    this.client = socket2;
                                    if (socket != null)
                                    {
                                        socket.Close();
                                    }
                                }
                                else if (socket != null)
                                {
                                    socket.Connect(address, port);
                                    isConnected = true;
                                    this.client = socket;
                                    if (socket2 != null)
                                    {
                                        socket2.Close();
                                    }
                                }
                                IPAddress = address;
                            }
                        }
                        catch
                        {
                            isConnected = false;
                        }
                    }
                }
                catch
                {
                    isConnecting = false;
                }
                finally
                {
                    if (!isConnected)
                    {
                        if (socket != null)
                        {
                            socket.Close();
                        }
                        if (socket2 != null)
                        {
                            socket2.Close();
                        }

                        lock (lockerObj)
                        {
                            isConnecting = false;
                        }
                    }
                }

                if (isConnected)
                {
                    sendHandshakeCommand(client);
                }
                else
                {
                    if (Connected != null)
                    {
                        Connected(this, new WebSocketConnectedEventArgs(false, this));
                    }
                }
            }), ci);

            return(true);
        }