Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Пульсация на C# в консоли... / 12 сообщений из 12, страница 1 из 1
16.11.2011, 02:40
    #37528407
zidan4ed
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пульсация на C# в консоли...
Кто-то сталкивался с пульсацией в консоли на 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
16.11.2011, 03:16
    #37528422
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пульсация на C# в консоли...
zidan4edКто-то сталкивался с пульсацией в консоли на c#?
Принцип работы знаю, а как реализовать - нет.А что такое "пульсация"?
...
Рейтинг: 0 / 0
16.11.2011, 03:23
    #37528424
zidan4ed
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пульсация на C# в консоли...
White Owl,

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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


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