powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Пульсация на C# в консоли...
12 сообщений из 12, страница 1 из 1
Пульсация на C# в консоли...
    #37528407
zidan4ed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кто-то сталкивался с пульсацией в консоли на c#?
Принцип работы знаю, а как реализовать - нет.
Вот клиент:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;

namespace client
{
    public class Program
    {
        public static void Main(string[] args)
        {
            //буфер для входящих данных
            byte[] byt1 = new byte[1024];
            //соединение
            try
            {
                //устанавливаем удаленную конечнуюточку
                Console.WriteLine("Введите IP:");
                IPHostEntry ipH = Dns.Resolve(Console.ReadLine());//127.0.0.1
                IPAddress ipA = ipH.AddressList[0];
                Console.WriteLine("Введите № порта:");
                IPEndPoint ipEndP = new IPEndPoint(ipA, Convert.ToInt32(Console.ReadLine()));//11000
                Socket otp = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                //соед. сокет с удал. точкой
                otp.Connect(ipEndP);
                Console.WriteLine("Socket connected: {0}", otp.RemoteEndPoint.ToString());
                Console.WriteLine("Введите текст сообщения:");
                string theMessage = Convert.ToString(Console.ReadLine());
                byte[] msg = Encoding.ASCII.GetBytes(theMessage + "<TheEnd>");
                //отправка д-х через сокет
                int bytSent = otp.Send(msg);
                //получаем ответ
                int bytRec = otp.Receive(byt1);
                Console.WriteLine("Mess from server:{0}", Encoding.ASCII.GetString(byt1, 0, bytRec));
                //освобождаем сокет
                otp.Shutdown(SocketShutdown.Both);
                otp.Close();
            }
            catch (Exception e)
            {
                Console.WriteLine("Exception:{0}",e.ToString());
            }
            
        }
    }
}
сервер
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;

namespace server
{
    public class Program
    {
       public static void Main(string[] args)
        {
           //лок. конечная точка
            IPHostEntry IpH = Dns.Resolve("localhost");
            IPAddress IpA = IpH.AddressList[0];
            IPEndPoint IpEndP = new IPEndPoint(IpA, 11000);
           //создаем сокет
            Socket One = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            try
            {
                One.Bind(IpEndP);
                One.Listen(10);
                while (true)
                {
                    Console.WriteLine("Ожидаем соединение через порт {0}", IpEndP);
                    Socket handler = One.Accept();
                    string Dt = null;
                    //дождались клиента
                    while (true)
                    {
                        byte[] byt1 = new byte[1024];
                        int bytRec = handler.Receive(byt1);
                        Dt += Encoding.ASCII.GetString(byt1, 0, bytRec);
                        if (Dt.IndexOf("<TheEnd>") > -1)
                        {
                            break;
                        }
                    }
                    Console.WriteLine("текс получен: {0}", Dt);
                    string Otvet = "Thank for" + Dt.Length.ToString() + "charact";
                    byte[] msg = Encoding.ASCII.GetBytes(Otvet);
                    handler.Send(msg);
                    handler.Shutdown(SocketShutdown.Both);
                    handler.Close();
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }
    }
}
...
Рейтинг: 0 / 0
Пульсация на C# в консоли...
    #37528422
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zidan4edКто-то сталкивался с пульсацией в консоли на c#?
Принцип работы знаю, а как реализовать - нет.А что такое "пульсация"?
...
Рейтинг: 0 / 0
Пульсация на C# в консоли...
    #37528424
zidan4ed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl,

Это проверка соединения между клиентом и сервером,
клиент посылает пустые сообщения - т.е. пульсы по истечению некоторого времени,
и на протяжении еще некоторого времени ждет ответ от сервера, если сервер за этот промежуток времени отвечает - все нормально, если нет - то обнаружено прерывание...
...
Рейтинг: 0 / 0
Пульсация на C# в консоли...
    #37528966
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zidan4ed..клиент посылает пустые сообщения...и на протяжении еще некоторого времени ждет ответ от сервера....то обнаружено прерывание...


у вас не каша, а супер каша в голове! либо так изложили свою мысль.
1) речь идёт о чём? о консольном приложение на си бимоле? Или о низкоуровневом сетевом программировании?
2) Вы протокол изучали, который юзаете? Насколько вижу из ваших исходников - TCP/IP. Вы о нём читале или нет? Что он гарантирует? Чем отличается (например) от UDP? прочтите где нить популярную литературу или МСДН - много чего узнаете...
3) прерывание это прерывание чаво? аппаратное, программное, связи или ышо какое?

на мой взгляд у вас перебор инфы. при этом она бессвязная и бестолковая...
если очень коротко - не делайте мозх себе и другим. у вас си бимоль? уровень канала TCP/IP? Ну и нахрен вам делать надшлёпку над стандартным поведением протокола, способного эту ситуацию опознать и разрулить? Или вам нужно другие временные интервалы? тогда гуглите на предмет их изменения в самом протоколе... Или вас забанили во всём инете?

при разрыве соединения вам апи который вы бодро юзаете сам вернёт ошибку (эксепшен или код возврата - см. МСДН на этот счёт). Нафига вам ещё, что то? тем более если будет обрыв коннекта - вы всё равно это узнаете стандартным способом заложенного в апи а не вашими супер загрузками машинного времени !!!

удачи вам, она вам потребуется
(круглый)
...
Рейтинг: 0 / 0
Пульсация на C# в консоли...
    #37529178
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кажется это называется heartbeat. Используется в кластерах высокой готовности.
...
Рейтинг: 0 / 0
Пульсация на C# в консоли...
    #37533215
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКажется это называется heartbeat....

ну да, ну да...
у вас так же перебор инфы в мозгу

читаем популярную инфу на эту тему...
цитата:
"меры способности системы выполнять свое предназначение даже при авариях, поломках оборудования и других происшествиях"

ну а теперь мне расскажите как логический пинг по TCP/IP поможет при обрыве кабелюки к серверу...

бу-га-га
(круглый)
...
Рейтинг: 0 / 0
Пульсация на C# в консоли...
    #37533235
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Круглый я не понял твоего сарказма.
...
Рейтинг: 0 / 0
Пульсация на C# в консоли...
    #37533337
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
kolobok0ну а теперь мне расскажите как логический пинг по TCP/IP поможет при обрыве кабелюки к серверу...

бу-га-га
(круглый) элементарно. бу-га-га

например, сообщит пользователю (или программе) о недоступности соединения. и пользователь (или программа) не будут выполнять какую-о работу зря.
или же начнет использовать какой-то другой (альтернативный) путь решения, в том числе локальную запись действий для последующей передачи.
...
Рейтинг: 0 / 0
Пульсация на C# в консоли...
    #37536057
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eNose...например, сообщит пользователю (или программе) о недоступности соединения....

внимательней фокусируемся на вопросе. не отвлекаемся при обдумывания ответа!!!!

вопрос был какой? сделать надшлёпку над TCP/IP. Причём тут последующие действия в программе? Зачем делать то, что уже есть в самом протоколе? типа программирование ради программирования?

Пример:
У вас в руках телефон. Установлена связь. Вы на дисплее видите что абонент в коннекте. Зачем постоянно просить сказать слово мама, каждые 10 секунд? Если при обрыве связи ваш телефон скажет - всё, канал протух?

нет конечно же можно расписывать то, что клиент потом возмёт другой мобильник. Или позвонит с городского... Но речь шла о канале связи, а не о комплексе мер человека, организации в которой он работает, страны которой важно чтоб организация работала, земле чтоб....

ну прям как дети
(круглый)
...
Рейтинг: 0 / 0
Пульсация на C# в консоли...
    #37536157
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
kolobok0Пример:
У вас в руках телефон. Установлена связь. Вы на дисплее видите что абонент в коннекте. Зачем постоянно просить сказать слово мама, каждые 10 секунд? Если при обрыве связи ваш телефон скажет - всё, канал протух? но канал может протухнуть и без соединения :)
захочешь позвонить - а связи нет.


kolobok0вопрос был какой? сделать надшлёпку над TCP/IP. Причём тут последующие действия в программе? Зачем делать то, что уже есть в самом протоколе? не касаясь конкретного вопроса, а вообще:
доступность компьютера по tcp/ip совершенно не означает доступность, например, субд oracle на этом компьютере :)
...
Рейтинг: 0 / 0
Пульсация на C# в консоли...
    #37539026
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eNoseно канал может протухнуть и без соединения :) захочешь позвонить - а связи нет.

..не касаясь конкретного вопроса, а вообще: доступность компьютера по tcp/ip совершенно не означает доступность, например, субд oracle на этом компьютере :)

полностью с вами согласен. сфера коня достаточна чтоб измерить длину :)
не видел в первом посте ни логику тестирования доступности, ни коннекшен к ораклу. постарался обратить внимание, что надшлёпка над стандартными средствами не плюс, а большой минус любой системы.


(круглый)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Пульсация на C# в консоли...
    #38452965
Alexey Furmanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
протокол TCP гарантирует доставку, но не спешит фиксировать факт обрыва соединения. Увидите Вы этот факт только при попытке отправки сообщения и таймауте на отсутствие подтверждения. Да, действительно, существует встроенный механизм keep-alive, но по стандарту он не обязан сообщать Вам об обрыве несколько часов. Чтобы проверить мои слова - напишите простенький клиент-сервер включите его на двух реальных компах и вытащите кабель. Никакой реакции ни на клиенте ни на сервере не будет!
А теперь представьте Скайп, в котором человек часами висит онлайн, Вы ему отправляете сообщение и только после этого узнаёте, что он отключился, класс? Вот для отслеживания таких ситуаций этого и необходим механизм "пульсации" (англ. heartbeat). Рекомендую почитать книжку Йона Снайдера "Эффективное программирование TCP/IP", она не новая, найдёте djvu или pdf. Там есть Совет №10, про то, что TCP не выполняет опрос соединения, и там же приведен пример реализации механизма "пульсации".
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Пульсация на C# в консоли...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]