Exemplo n.º 1
0
 static void Main(string[] args)
 {
     // Создадим новый сервер на порту 8080
     MyClass Port = new MyClass();
     if (Port.GetStatusPort() == true)
         new Server(8082, Port);                 
 }
Exemplo n.º 2
0
 static void ClientThread(Object StateInfo, MyClass PortOpen)
 {
     // Просто создаем новый экземпляр класса Client и передаем ему приведенный к классу TcpClient объект StateInfo
     new Client((TcpClient)StateInfo, PortOpen);
 }
Exemplo n.º 3
0
        TcpListener Listener; // Объект, принимающий TCP-клиентов

        // Запуск сервера
        public Server(int Port, MyClass PortOpen)
        {
            IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());
            IPAddress ipAddress = ipHostInfo.AddressList[0];
            Console.WriteLine("Host name PC: {0}:{1}", ipHostInfo.AddressList[0], Port);
            Listener = new TcpListener(ipAddress, Port); // Создаем "слушателя" для указанного порта
            Listener.Start(); // Запускаем его
            int index = 0;
            // В бесконечном цикле
            while (true)
            {
                // Принимаем нового клиента
                try
                {
                    TcpClient Client = Listener.AcceptTcpClient();
                    if (Client != null)
                    {
                        Console.WriteLine("New Connect... {0}", index);
                        index++;
                        ClientThread(Client, PortOpen);                        
                    }
                }
                catch(InvalidOperationException)
                    {}
                catch(SocketException)
                    {}               
            }
        }
Exemplo n.º 4
0
        // Конструктор класса. Ему нужно передавать принятого клиента от TcpListener
        public Client(TcpClient Client, MyClass ComPort)
        {
            // Объявим строку, в которой будет хранится запрос клиента
            string Request = "";
            // Буфер для хранения принятых от клиента данных
            byte[] Buffer = new byte[1024];
            // Переменная для хранения количества байт, принятых от клиента
            int Count;
            try
            {
                // Читаем из потока клиента до тех пор, пока от него поступают данные
                if ((Count = Client.GetStream().Read(Buffer, 0, Buffer.Length)) > 0)
                {
                    // Преобразуем эти данные в строку и добавим ее к переменной Request

                    Request += Encoding.ASCII.GetString(Buffer, 0, 50);
                    // Запрос должен обрываться последовательностью \r\n\r\n
                    // Либо обрываем прием данных сами, если длина строки Request превышает 4 килобайта
                    // Нам не нужно получать данные из POST-запроса (и т. п.), а обычный запрос
                    // по идее не должен быть больше 4 килобайт
                    //if (Request.Contains("@") == true)
                    //{
                    //    Console.WriteLine("Index @: {0}", Request.IndexOf("@"));
                    //    break;
                    //}
                }
            }
            catch (IOException)
            { }

            int index = -1;
            int ID = 0;
            double pr;
            byte[] Buffer2 = new byte[50];
            String massage = "";
            Console.WriteLine(Request);
            if (Request.Contains("@id=") == true)
            {
                index = Request.IndexOf("@id=");
                pr = char.GetNumericValue(Request[index + 4]);
                ID = Convert.ToInt32(pr);

                switch (ID)
                {
                    //case 0:
                    //    massage = "Bad Request.";
                    //    break;
                    //case 1:
                    //    massage = ComPort.GetWeight();
                    //    break;
                    //case 2:
                    //    massage = ComPort.GetStateOfWeight(0);
                    //    break;
                    //case 3:
                    //    massage = ComPort.RemoveIncludeWeight();
                    //    break;
                    default:
                        massage = "ERROR!!!";
                        break;
                }               
            }
            else
                massage = "Bad Request.";

            Buffer2 = Encoding.ASCII.GetBytes(massage);
            Console.WriteLine(massage);
            // Отправим его клиенту
            try
            {
                Client.GetStream().Write(Buffer2, 0, Buffer2.Length);
                Client.Close();
            }
            catch (IOException)
            { }
        }
Exemplo n.º 5
0
        public Server(int portTCP, MyClass PortOpenNew)
        {
            IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());
            IPAddress ipAddress = ipHostInfo.AddressList[0];
            Console.WriteLine("Host name my PC: {0}:{1} \n<<---------------------------------------->>", ipHostInfo.AddressList[0], portTCP);
            Listener = new TcpListener(ipAddress, portTCP); // Создаем "слушателя" для указанного порта

            try
            {
                Listener.Start(); // start listener

                // hide console window
                ToggleWindow(false);
                
                // создаем контекстное меню
				ContextMenu TrayMenu = new ContextMenu();
				TrayMenu.MenuItems.Add("Показать/спрятать консоль", TrayToggle);
                TrayMenu.MenuItems.Add("Перезапустить сервер ваг", RestartServer);
				TrayMenu.MenuItems.Add("Выход", OnExit);

                TrayIcon = new NotifyIcon();
                TrayIcon.ContextMenu = TrayMenu; // registering context menu 
                TrayIcon.Icon = new System.Drawing.Icon("server.ico");
                TrayIcon.Visible = true;
                TrayIcon.Text = "Сервер ваг работает. Порт: " + portTCP;
                TrayIcon.MouseDoubleClick += new MouseEventHandler(TrayClick); // show/hide console window double click
                TrayIcon.ShowBalloonTip(2000, "Сервер ваг", "Сервер ваг успешно запущен и работает!", ToolTipIcon.Info);
                System.Threading.Thread.Sleep(2000);

                //createing timer for start listener
                TrayTimer = new System.Timers.Timer();
                TrayTimer.Interval = 100;
                TrayTimer.Enabled = true;
                TrayTimer.Elapsed += new System.Timers.ElapsedEventHandler(StartListener); // основная функция консоли
                PortOpen = PortOpenNew;

                Application.Run();
            }
            catch (Exception e)
            { return; }
           
        }
Exemplo n.º 6
0
        // Конструктор класса. Ему нужно передавать принятого клиента от TcpListener
        public Client(TcpClient Client, MyClass ComPort)
        {

            string Request = ""; // string for questions from client
            byte[] Buffer = new byte[1024]; // buff for questions from client 
            int Count; // number send bytes from client
            try
            {
                // read data from stream
                if ((Count = Client.GetStream().Read(Buffer, 0, Buffer.Length)) > 0)
                {
                    // convert data into string
                    Request += Encoding.ASCII.GetString(Buffer, 0, 50);
                }
            }
            catch (IOException)
            { }
            
            int index = -1;
            int ID = 0;
            double pr;
            byte[] Buffer2 = new byte[50];
            String massage = "";            
            if (Request.Contains("?id=") == true)
            {
                Console.WriteLine("" + Client.Client.RemoteEndPoint.ToString() + "\n" + Request);
                index = Request.IndexOf("?id=");
                pr = char.GetNumericValue(Request[index + 4]);
                ID = Convert.ToInt32(pr);

                switch (ID)
                {
                    case 0:
                        massage = "Bad Request.";
                        break;
                    case 1:
                        massage = ComPort.GetWeight();
                        break;
                    case 2:
                        massage = ComPort.GetStateOfWeight();
                        break;
                    case 3:
                        massage = ComPort.RemoveIncludeWeight();
                        break;
                    default:
                        massage = "ERROR!!!";
                        break;
                }
                Buffer2 = Encoding.ASCII.GetBytes(massage);
                Console.WriteLine(massage + "\n<<----------------------------------------->>\n");
            }
            //else
            //    massage = "Bad Request.";

           
            try
            {
                //sending answer to client
                Client.GetStream().Write(Buffer2, 0, Buffer2.Length);
                Client.Close();
            }
            catch (IOException)
            { }
        }