Beispiel #1
0
        //Функція для роботи з підключеними сокетами
        static public void Client_accept(object arg)
        {
            Socket        socket       = (Socket)arg;   // Отриманий сокет
            StringBuilder builder      = new StringBuilder();
            int           buffer_bytes = 0;

            byte[] buffer = new byte[256];
            do
            {
                buffer_bytes = socket.Receive(buffer);
                builder.Append(Encoding.Unicode.GetString(buffer, 0, buffer_bytes));
            }while (socket.Available > 0);

            Messege_client mess = JsonConvert.DeserializeObject <Messege_client>(builder.ToString()); // ДиСеріалізація структури у формат json

            lock (locker)
            {
                list_client = list_client + DateTime.Now + " : " + builder.ToString() + "\n";                                   // Занесемо підключенного кліента до списку
            }
            //Відправляемо відповідь
            Massege answ = new Massege(builder.ToString() + " Подключен");

            buffer = Encoding.Unicode.GetBytes(JsonConvert.SerializeObject(answ));
            socket.Send(buffer);
        }
Beispiel #2
0
        static void Main(string[] args)
        {
            Console.WriteLine("Ждем подключения. . .");

            // Створимо сокет
            Socket listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            listenSocket.Bind(Serv.ipPoint); // Підклемо до адресси
            listenSocket.Listen(10);         // Почнемо прослуховування

            bool timer_flag = true;

            while (true)
            {
                if (timer_flag) // Таймер
                {
                    List <Socket> cond = new List <Socket>()
                    {
                        listenSocket
                    };
                    Socket.Select(cond, null, null, 100000);                // Перевірка на зміни у сокетах
                    if (cond.Count > 0)
                    {
                        // Запускаемо Task - таймер
                        Task timer = Task.Run(() =>
                        {
                            list_client += "Время начала таймера :  " + DateTime.Now + "\n";
                            Thread.Sleep(TimeSpan.FromSeconds(22));

                            byte[] buffer = new byte[512];
                            Massege answ  = new Massege(list_client);
                            buffer        = Encoding.Unicode.GetBytes(JsonConvert.SerializeObject(answ));
                            for (int i = 0; i < sockets.Count; i++)
                            {
                                sockets[i].Send(buffer);
                            }
                        });
                        timer_flag = false;
                    }
                }
                // Приймаємо запит
                sockets.Add(listenSocket.Accept());
                Thread th = new Thread(new ParameterizedThreadStart(Client_accept)); //Новий потік для роботи зі сокетом
                th.Start(sockets[sockets.Count - 1]);
            }
        }