Пример #1
0
        private void connectToServerButton_Click(object sender, EventArgs e)
        {
            localipAddr  = localIPHost.AddressList[localIPcomboBox.SelectedIndex];
            remoteipAddr = IPAddress.Parse(serverIpTextBox.Text);

            MessageClass mess = new MessageClass();

            mess.User     = userNameTextBox.Text.Trim();
            mess.Password = passTextBox.Text.Trim();
            mess.Command  = "Connect";
            mess.Data     = localipAddr.ToString();



            MessageClass ansmessage = SendCommandToServer(mess);

            if (ansmessage.Command.Equals("Connect") == true)
            {
                userListListBox.Items.Add(ansmessage.Data);
                //Запускаем новый поток с новым сокетом, в котором будем дальше общаться с сервером
            }
            else
            {
                MessageBox.Show(ansmessage.Data, ansmessage.Command);
            }
        }
Пример #2
0
        private void getUsersListButton_Click(object sender, EventArgs e)
        {
            MessageClass mess = new MessageClass();

            mess.User     = userNameTextBox.Text.Trim();
            mess.Password = passTextBox.Text.Trim();
            mess.Command  = "GetUsersList";
            mess.Data     = localipAddr.ToString();



            MessageClass ansmessage = SendCommandToServer(mess);

            if (ansmessage.Command.Equals("GetUsersList") == true)
            {
                userListListBox.Items.Add(ansmessage.Data);
                //Запускаем новый поток с новым сокетом, в котором будем дальше общаться с сервером
            }
            else
            {
                MessageBox.Show(ansmessage.Data, ansmessage.Command);
            }
        }
Пример #3
0
        private void ControlCommandsFlow()
        {
            Socket handler = null;



            IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 11100);

            Socket sListener = new Socket(ipAddr.AddressFamily, SocketType.Stream, ProtocolType.Tcp);


            MessageClass backmessage = new MessageClass();


            try
            {
                sListener.Bind(ipEndPoint);
                sListener.Listen(10);



                this.Invoke(this.addLogDelegate, "Запускаем сервер");



                while (true)
                {
                    // Начинаем слушать соединения
                    handler = sListener.Accept();


                    // Мы дождались клиента, пытающегося с нами соединиться

                    byte[] bytes    = new byte[65000];
                    int    bytesRec = handler.Receive(bytes);



                    if (bytesRec != 0)
                    {
                        MemoryStream    mem_stream = new MemoryStream(bytes);
                        BinaryFormatter formatter  = new BinaryFormatter();



                        MessageClass message = (MessageClass)formatter.Deserialize(mem_stream);

                        this.Invoke(this.addLogDelegate, "Подключился пользователь " + message.User.ToString());
                        this.Invoke(this.addLogDelegate, "С паролем " + message.Password.ToString());
                        this.Invoke(this.addLogDelegate, "С командой " + message.Command.ToString());
                        this.Invoke(this.addLogDelegate, "С адреса " + message.Data.ToString());


                        if (message.Command.Equals("Connect") == true)
                        {
                            int index = this.usersBindingSource.Find("username", message.User);

                            if (index > -1)
                            {
                                if (skytalkDataSet.users.Rows[index]["password"].Equals(message.Password) == true)
                                {
                                    backmessage.Command = "Connect";

                                    UserTreadSettingsClass ut = new UserTreadSettingsClass();

                                    ut.username = message.User;
                                    ut.ipadr    = message.Data;
                                    ut.port     = userslist.Count + 11101;

                                    userslist.Add(ut);

                                    backmessage.Data = ut.port.ToString();

                                    //ThreadPool.QueueUserWorkItem(userthread, ut);

                                    //на каждого клента будет запускаться отдельный поток с отдельным новым сокетом на индивидуальном порту.
                                    //возможно я не прав, и есть другой путь.
                                    // номера портов 11101 - первый пользователь
                                    //11102  - второй пользователь и тд.
                                    // этот поток на порту 11100 только для подключения и авторизации новых клиентов


                                    //TODO пользователь может залогиниться несколько раз. Сделать проверку
                                }
                                else
                                {
                                    backmessage.Command = "PasswordWrong";
                                    backmessage.Data    = "Плохой пароль";
                                    this.Invoke(this.addLogDelegate, "Плохой пароль ");
                                }
                            }
                            else
                            {
                                backmessage.Command = "ConnectWrong";
                                backmessage.Data    = "Пользователь не найден";
                                this.Invoke(this.addLogDelegate, "Пользователь не найден ");
                            }
                        }

                        if (message.Command.Equals("GetUsersList") == true)
                        {
                            backmessage.Command = "GetUsersList";
                            backmessage.Data    = null;

                            for (int i = 0; i < userslist.Count; i++)
                            {
                                backmessage.Data += userslist[i].username + ";";
                            }
                        }


                        if (message.Command.Equals("CallUser") == true)
                        {
                            backmessage.Data = userslist.Find(x => x.username.Equals(message.Data)).ipadr;
                        }

                        // logListBox.BeginInvoke((Action)delegate () { logListBox.Items.Add(message.User.ToString()); });


                        backmessage.User     = message.User;
                        backmessage.Password = "";

                        BinaryFormatter serializer = new BinaryFormatter();

                        MemoryStream ans_mem_stream = new MemoryStream();
                        serializer.Serialize(ans_mem_stream, backmessage);


                        handler.Send(ans_mem_stream.GetBuffer());
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            finally
            {
                handler.Shutdown(SocketShutdown.Both);
                handler.Close();

                MessageBox.Show("Все пропало");
            }
        }
Пример #4
0
        private MessageClass SendCommandToServer(MessageClass msgToServer)
        {
            MessageClass msgFromSrerver = null;

            // Буфер для входящих данных
            byte[] bytes = new byte[65000];



            // Соединяемся с удаленным устройством



            // Устанавливаем удаленную точку для сокета
            remoteipEndPoint = new IPEndPoint(remoteipAddr, 11100);


            try
            {                //Создаем сокет
                Socket socketsender = new Socket(remoteipAddr.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

                // Соединяем сокет с удаленной точкой
                socketsender.Connect(remoteipEndPoint);



                //    MessageClass mess = new MessageClass();

                //    mess.User = userNameTextBox.Text.Trim();
                //    mess.Password = passTextBox.Text.Trim();
                //    mess.Command = "Connect";
                //    mess.Data = localipAddr.ToString();

                BinaryFormatter serializer = new BinaryFormatter();

                MemoryStream mem_stream = new MemoryStream();
                serializer.Serialize(mem_stream, msgToServer);


                // Отправляем данные через сокет
                int bytesSent = socketsender.Send(mem_stream.GetBuffer());

                Thread.Sleep(500);



                // Получаем ответ от сервера
                int bytesRec = socketsender.Receive(bytes);

                //MessageClass ansmessage = null;
                if (bytesRec > 0)
                {
                    MemoryStream    ans_mem_stream = new MemoryStream(bytes);
                    BinaryFormatter formatter      = new BinaryFormatter();

                    msgFromSrerver = (MessageClass)formatter.Deserialize(ans_mem_stream);
                }

                //       if (ansmessage.Command.Equals("Connect") == true)
                //       {

                //           userListListBox.Items.Add(ansmessage.Data);
                //Запускаем новый поток с новым сокетом, в котором будем дальше общаться с сервером
                //       }
                //       else
                //       {
                //           MessageBox.Show(ansmessage.Data, ansmessage.Command);
                //       }



                // Освобождаем сокет
                socketsender.Shutdown(SocketShutdown.Both);
                socketsender.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }



            return(msgFromSrerver);
        }