|
Обмен сообщениями в локальной сети на основе mailslot (исходники, описание и пример)
|
|||
---|---|---|---|
#18+
Думаю многие делали или хотели сделать механизм обмена сообщениями между пользователями своей сетевой проги. Например иметь возможность написать всем "Требуется закрыть прогу для индексирования". Предлагаю свою реализацию. Узнал случайно про механизм виндовса для обмена сообщениями между процессами mailslot Принцип вкратце такой: каждое приложение слушает слот с определенным именем и получает все что на него приходит. Отправка возможна в пределах своего компа, на конкретный комп сети и всем сразу. Вот последний вариант меня и заинтересовал. Тем кто захочет потестить в архиве пример простенького чата: Откомпилировать в VFP9 и запускать EXE или запустить форму frmChat Задать имя канала и свои имя (от которого пойдут сообщения) Нажать кнопку "Начать прослушивание" Писать снизу сообщения и давить "Отправить" Доходит мгновенно, без задержек. Основных файла два: mailslotvfp.dll - там вся работа со слотами, написал на С т.к. нужны были потоки. Исходники тоже приложил если кто подопиливать захочет. В принципе можно только на фоксе все сделать, но проверять входящие придется по таймеру, будут задержки. Тут вместо таймера я сделал отправку оконного сообщения окну фокса, для оповещения о приходе сообщения в слот. mailslotvfp.prg - класс-обертка над функциями mailslotvfp.dll, описаловка внутри. По сути это заготовка, дальше можно допиливать кому как фантазия позволит, например сделать формат сообщения "от кого;кому;текст" и игнорировать чужие сообщения - получится аська. Сначала хотел так сделать, но отказался - лишний код только запутает понимание работы транспорта. В сети это работает по протоколу UDP, в связи с этим есть ограничения 1. Максимальный размер сообщения 424 байта 2. Доставка сообщений не гарантируется и отправителем не контролируется. Я потерь не замечал, но если нужны гарантии доставки: отправлять получателем подтверждение приема, а отправителем повторять отправку если не было подтверждения в течении заданного таймаута. Кому интересно - качайте, запускайте, пользуйтесь. Будут вопросы - пишите сюда. Найдете косяки - пишите, поправлю. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2014, 12:09 |
|
|
start [/forum/topic.php?fid=41&fpage=28&tid=1582500]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
66ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
others: | 315ms |
total: | 468ms |
0 / 0 |