Проверка существования подключения к Socket Server со стороны клиента
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.217.37] |
|
|
Соблюдайте общие правила форума
MSDN Library
FAQ раздела
Поиск по разделу
Как правильно задавать вопросы| Страницы: (4) « Первая ... 2 3 [4] все ( Перейти к последнему сообщению ) |
Проверка существования подключения к Socket Server со стороны клиента
|
Сообщ.
#46
,
|
|
|
|
Мдя....Ну и где ты проверяешь результат вызова этой функции? Сколько байт у тебя реально отправилось в канал? |
|
Сообщ.
#47
,
|
|
|
|
Решил проблему следующим образом. Знаю что не элегантно. Знаю Вы решили бы красивее но так работает и ответ о отключении приходит с приличной скоростью.
![]() ![]() unit Unit3; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, winsock, StdCtrls, IdIcmpClient; type PingTread = class(TThread) ind: TIdIcmpClient; public tex:string; private { Private declarations } protected procedure Execute; override; procedure scan(); procedure FormUpd; public constructor create_tr(ips: string; port:integer); end; implementation uses unit2, unit1; constructor PingTread.create_tr(ips: string; port:integer); begin inherited Create(true); ind:=TIdIcmpClient.Create(nil); ind.Port:=port; ind.Host:=ips; FreeOnTerminate:=true; Priority:=tpLower; Resume; end; procedure PingTread.Execute; begin while true do begin scan(); Synchronize(FormUpd); sleep(4000); end; end; procedure PingTread.FormUpd; begin form1.Label3.Caption:=tex; if tex='connect' then form1.flagOut:=true else form1.flagOut:=false end; procedure PingTread.scan(); begin ind.Ping; if ind.ReplyStatus.TimeToLive=100 then tex:='connect' else tex:='disconnect' end; end. Добавлено Цитата medved_68 @ Мдя....Ну и где ты проверяешь результат вызова этой функции? Сколько байт у тебя реально отправилось в канал? ![]() вот чисто для себя все таки хочу разобраться. Как это проверить? |
|
Сообщ.
#48
,
|
|
|
|
Цитата apprentice @ ![]() ![]() while true do А поток, стало быть, ты разрушаешь извне? Или "утечка памяти" на неразрушенный объект?Цитата apprentice @ Ну так почитай справку, что ли, по функции SendBuf. ЧТО ОНА ВОЗВРАЩАЕТ в качестве РЕЗУЛЬТАТА своего ВЫПОЛНЕНИЯ...И сразу станет ясно, как это делается. вот чисто для себя все таки хочу разобраться. Как это проверить? |
|
Сообщ.
#49
,
|
|
|
|
Цитата medved_68 @ Цитата apprentice @ ![]() ![]() while true do А поток, стало быть, ты разрушаешь извне? Или "утечка памяти" на неразрушенный объект?Цитата apprentice @ Ну так почитай справку, что ли, по функции SendBuf. ЧТО ОНА ВОЗВРАЩАЕТ в качестве РЕЗУЛЬТАТА своего ВЫПОЛНЕНИЯ...И сразу станет ясно, как это делается. вот чисто для себя все таки хочу разобраться. Как это проверить? ![]() он разрушается при закрытии приложения. Он же должен висеть в памяти пока оно запущено конечно можно сделать и по таймеру. Как Вы считаете лучше? |
|
Сообщ.
#50
,
|
|
|
|
Цитата apprentice @ он разрушается при закрытии приложения. Я понимаю. Но сомнения. Не вяжется вот это:Цитата apprentice @ с вот этим:![]() ![]() FreeOnTerminate:=true; Цитата apprentice @ ![]() ![]() while true do Цитата apprentice @ Как Вы считаете лучше? Неверно. Считать должен ты. Я же не знаю полного расклада. Так что.....Может у тебя там вообще комп выключается с прекращением работы приложения и такой подход вполне оправдан. |
|
Сообщ.
#51
,
|
|
|
|
попробовал сделать так
![]() ![]() bufS[1]:=30; bufS[2]:=5; bufS[3]:=5; bufS[4]:=0; bufS[5]:=0; bufS[6]:=0; bufS[7]:=0; bufS[8]:=0; bufS[9]:=0; bufS[10]:=0; bufS[11]:=0; bufS[12]:=0; bufS[13]:=0; bufS[14]:=0; i:=output.Socket.SendBuf(BufS,14); form1.Label3.Caption:=inttostr(i); если я правильно Вас понял то при отключении число должно стать = 0 это происходит через 40 сек после отключения. Это очень долго. |
|
Сообщ.
#52
,
|
|
|
|
Цитата apprentice @ если я правильно Вас понял то при отключении число должно стать = 0 Да. Цитата apprentice @ Это очень долго. Почему? |
|
Сообщ.
#53
,
|
|
|
|
Цитата medved_68 @ Неверно. Считать должен ты. Я же не знаю полного расклада. Так что.....Может у тебя там вообще комп выключается с прекращением работы приложения и такой подход вполне оправдан. ![]() Ну в принципе да если стопорнуть это приложение никто никуда не выйдет и не задет на предприятии. Так что комп будит выключатся только вместе с программой. |
|
Сообщ.
#54
,
|
|
|
|
Цитата apprentice @ Ну в принципе да если стопорнуть это приложение никто никуда не выйдет и не задет на предприятии. СКУД? |
|
Сообщ.
#55
,
|
|
|
|
Цитата medved_68 @ Цитата apprentice @ Ну в принципе да если стопорнуть это приложение никто никуда не выйдет и не задет на предприятии. СКУД? ![]() Вы шпионите за мной Да он самый Добавлено Цитата apprentice @ Цитата medved_68 @ Неверно. Считать должен ты. Я же не знаю полного расклада. Так что.....Может у тебя там вообще комп выключается с прекращением работы приложения и такой подход вполне оправдан. ![]() Ну в принципе да если стопорнуть это приложение никто никуда не выйдет и не задет на предприятии. Так что комп будит выключатся только вместе с программой. А люди ждать не любят. А выпубать свичи для того что бы телефон подзарядить любят. А я хочу какуюто алярму присобачить что б сразу было видно что какой то из ридеров отвалился. Добавлено Цитата medved_68 @ Цитата apprentice @ если я правильно Вас понял то при отключении число должно стать = 0 Да. Цитата apprentice @ Это очень долго. Почему? ![]() ой чутка не то процитировал |
|
Сообщ.
#56
,
|
|
|
|
Цитата apprentice @ Да он самый Тогда у тебя неправильная топология. Ридер должен на борту иметь UNIQUE-коды карт. У меня каждый ридер оснащен восемью микросхемами 24С256 (для этой серии это максимальный пул адресации), что мне дает возможность без ОБРАЩЕНИЯ К ЦЕНТРАЛЬНОМУ серверу спокойно пропускать 2000 UNIQUE-кодов формата E-marine. Разумеется, они меняются каждый день в 00.00 в соответствии с поданными заявками мастеров на следующий день (подушевой список смен). Обычно в смене не более 125-200 человек, так что запас для ридеров весьма велик. Сам ридер фиксирует до 10 записей прохода и отправляет их на сервер, который на основе данных формирует документ посещения. Этим у меня занимается 1С (ну проще оказалось найти тело, понимающее в 1С, чем в тех же системах доступа, которые бесплатно предлагают все, кому не лень). Разумеется, если сервер почему то недоступен, то вся эта байда начинает сохранятся на mикроSD. Поэтому мой тебе совет - перекраивай топологию, пока не увяз по уши. Сеть не должна стать причиной сбоев СКУД. Иначе тебя могут серьезно и на нехилые бабки прижать те же пожарные, к примеру.... |
|
Сообщ.
#57
,
|
|
|
|
Цитата medved_68 @ Цитата apprentice @ Да он самый Тогда у тебя неправильная топология. Ридер должен на борту иметь UNIQUE-коды карт. У меня каждый ридер оснащен восемью микросхемами 24С256 (для этой серии это максимальный пул адресации), что мне дает возможность без ОБРАЩЕНИЯ К ЦЕНТРАЛЬНОМУ серверу спокойно пропускать 2000 UNIQUE-кодов формата E-marine. Разумеется, они меняются каждый день в 00.00 в соответствии с поданными заявками мастеров на следующий день (подушевой список смен). Обычно в смене не более 125-200 человек, так что запас для ридеров весьма велик. Сам ридер фиксирует до 10 записей прохода и отправляет их на сервер, который на основе данных формирует документ посещения. Этим у меня занимается 1С (ну проще оказалось найти тело, понимающее в 1С, чем в тех же системах доступа, которые бесплатно предлагают все, кому не лень). Разумеется, если сервер почему то недоступен, то вся эта байда начинает сохранятся на mикроSD. Поэтому мой тебе совет - перекраивай топологию, пока не увяз по уши. Сеть не должна стать причиной сбоев СКУД. Иначе тебя могут серьезно и на нехилые бабки прижать те же пожарные, к примеру.... ![]() проблема в том что ридер чисто сетевой и контроллер тоже(Данные хранить не умею памяти нет). Замки правда все электромагнитные то есть при отключении света все откроется. Да и на предприятии для которого я пишу эту гадость сейчас стоит обычный домофон еще та система сами понимаете если кто-то теряет карту чтобы её удалить надо все карты перебивать. А Вы насколько я понял используете контроллер с памятью и переходником на Ethernet. Если Вас не затруднит напишите модели оборудования я гляну что оно из себя представляет. Добавлено Хотя судя по всему у вас ети два устройства совмещены в одном блоке и не удивлюсь если там еще есть какая то линуксоидная операционочка которая управляет этим аццким дивайсом |
|
Сообщ.
#58
,
|
|
|
|
Цитата apprentice @ А Вы насколько я понял используете контроллер с памятью и переходником на Ethernet. Если Вас не затруднит напишите модели оборудования я гляну что оно из себя представляет. Нет. Я использую блочную структуру: 1. Считыватель - ![]() 2. Цп на микроконтроллере. 3. Канал связи либо на Wiznet - ![]() либо Olimex - ![]() либо Wi-Fi или BlueTooth - . Так проще, ибо то, что подходит мне лично и тем, кто с меня чего то просит, стоит как небольшой ледокол. В готовом виде, разумеется. Добавлено Цитата apprentice @ и не удивлюсь если там еще есть какая то линуксоидная операционочка Нет. Обычный асм модуль на 2072 байта. Добавлено Цитата apprentice @ Замки правда все электромагнитные то есть при отключении света все откроется. Для того, что бы открылось - сначала необходимо обесточить. Это если в случае ЧП... |
|
Сообщ.
#59
,
|
|
|
|
А где само устройство хранящее данные карт? просто в спецификации ридера я не вижу никаких упоминаний про хранение там написано только "Данные обрабатываются и соответствующим рядом передается в последовательной форме
в ведущий блок.". в принципе у меня схожий девайс только сразу на интерфейсе Ethernet http://vkmodule.com.ua/Ethernet/Ethernet5.html правда там есть и на RS-232 но под него нужно отдельную сеть тянуть и опять таки никаких гарантий на то что не произойдет обрыв. Ну а вот по поводу ВайФай преобразователей это вы меня порадовали. Приятное известие. Уточните пожалуйста сколько стоит один ВайФай преобразователь. Добавлено Цитата medved_68 @ Для того, что бы открылось - сначала необходимо обесточить. Это если в случае ЧП... ![]() Ну у них для выхода наружу кнопка вообще . Но да и разработчики контроллера постарались сделали его сервером при отключении связи устройство еще долго не узнает что клиент отвалился. Поэтому я и уделяю столько времени вопросам контроля соединения. А бюджетик выделенный на все ледокол купить не позволит. Да и так как скуд не совсем полноценный (кнопки для выхода внутри) выдают его бюджетность думаю у контролирующих структур вопросов быть не должно. Тут задача лишних не пускать и время писать когда пришли. |