· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.NETWORKS —› Как принять и отправить сообщение?

Посл.отвђт Сообщенiе


Дата: Окт 27, 2004 20:07:00 · Поправил: Безпощадный даос

Нужно быстро написать попап (программа, отсылающая-как net send- и принимающая сообщения(причем иногда на группу компов одновременно(широковещание, как я понимаю))). Какие функции позволяют это делать? Помочь может всё. Особенно исходник...


Дата: Окт 27, 2004 22:56:15

Видимо, фиктивный ответ самому себе - лучший способ привлечь внимание к теме на этом сайте. Господа создатели форума: сделайте так чтобы недавно созданные темы тоже появлялись при входе в форум по понятным причинам.


Дата: Окт 28, 2004 00:46:31

Не совсем так. Кто-то из модераторов (не я, в данном случае) решил поместить это в HELHEIM. Причину см. в правилах. Однако я так понимаю, ты поленился погуглить.


Дата: Окт 28, 2004 14:05:18

НЕПРАВДА! Во-первых, в HELHEIM эту тему создал я сам (не обратил внимание, что это значит..). На самом деле ей место в NetWorks (считайте, что она там или переместите её туда(если можно)). Во-втрорых я "Гуглил" и "Яндексил" всю ночь и нарыл следующее: используется функция NetMessageBufferSend(http://vbnet.mvps.org/index.html?code/network/net messagebuffersend.htm):

Я и написал, руководствуясь win32.hlp:
.386
.model flat,stdcall

include \MASM32\include\kernel32.inc
include \MASM32\include\masm32.inc
include \MASM32\include\netapi32.inc

includelib \MASM32\lib\kernel32.lib
includelib \MASM32\lib\masm32.lib
includelib \MASM32\lib\netapi32.lib

.data
elf db 'E',0,'L',0,'F',0,0,0,0
len=$-kaval

.code
start:
invoke NetMessageBufferSend,offset elf,offset elf,offset elf,offset elf,2
.if (eax==0)
invoke StdOut,offset kaval
.endif
invoke ExitProcess,0
end start

ELF - имя моего компа в сети.
А оно не работает. Ну я ещё перепробовал разные варианты с АСКИ- и Юникод-строкаи - ни в какую...

Но даже если бы оно работало это было бы не всё. Нужно ж ещё и принимать сообщения... Короче, я в отчаянии. Подскажите кто-нибудь!


Дата: Окт 29, 2004 05:14:15 · Поправил: Stub

А у тебя служба Messenger включена?
Передавать надо именно в Unicode, в описании четко прописано LPCWSTR
NET_API_STATUS NetMessageBufferSend(
LPCWSTR servername,
LPCWSTR msgname,
LPCWSTR fromname,
LPBYTE buf,
DWORD buflen
)


Дата: Окт 29, 2004 05:20:15

Еще способ - заюзать net send :)


Дата: Окт 29, 2004 07:13:51

Вот я тут попробовал накодить эту штуку :), получилось конечно ужасно (потестить не могу, т.к. нет у меня сетки да и сервиса нужного). В архивчике еще несколько примеров по теме на других языках...

1676044022__NetSend.zip


Дата: Окт 29, 2004 13:41:46

Messenger, как я понимаю, во время теста должна быть отключена.
Интересно, что когда я дизассемлил IDA'ой и WDASM'ом net.exe и попап, я искал, но не нашел этой функции...(хотя нашёл множество других из NetApi)(это так, к слову)

Пример я проверю сегодня же(спасибо большое)
Вопрос ещё и в том, как принимать такие сообщения. У меня есть подозрения, что протокол передачи - UDP... Можно проверить FireWall'ом и LanSpy (на моём компе не даёт сделать такую проверку, жалуется какой-то на сетевой экран, а что за экран - не понять(я никакого не ставил) - не суть). И тогда, видимо попап - просто UDP-сервер. Но это всё догадки, которые лишь можно проверить. Проверьте, если кто может.


Дата: Окт 31, 2004 09:48:00 · Поправил: valterg

„И тогда, видимо попап - просто UDP-сервер“

Все гораздо хуже. Советую начать от Адама.
В 3.1, 95-м и 98-м была служба Winpop.
Работает она по протоколу NETBEUI - самоделка от МС.
Я проверил через виртуальную машину с 98-м
и без протокола TCP/IP - сообщения прекрасно
ходят в обе стороны : из 98-го в 2000-й
и сообщение посланное через net send
попадает в Winpop. Посмотрел я и экспорты функций
в net.exe в 2000-м. Ковыряться лень - там есть
API из mpr.dll со словами connection.
Похоже строится канал и уже по нему передают
сообщения. Возможно что при отсутствии NETBEUI
работает NETBIOS через TCP/IP,
но это я оставляю тебе....


Дата: Ноя 2, 2004 15:52:26

А почему нельзя использовать сокеты, создать тот же клиент-сервер на UDP?
или необходимо именно из 98 посылать аналог net send на машины с 2000?


Дата: Ноя 2, 2004 17:13:41

Ура!! Нашёл. Набрал в Яндексе что-то вроде NETBEUI Winpopup и неожиданно для себя обнаружил ссылку на след. инструкции:

Отправка:
Способ 1. Функция NetMessageBufferSend, как и было сказано выше.

Способ 2(у меня только он заработал...) - работа с почтовыми ящиками... - всё в примере (Дельфи, правда)

Прием:
Один несложный способ
Создаём почтовый ящик с именем \\.\mailslot\messngr ,
В случае, если уже какая-нибудь служба (сообщений или попап) работает, то вернётся ошибка. По каждому срабатыванию таймера вызываем GetMailSlotInfo(MailslotHandle, NIL, NextMsgSize, @MsgCount, NIL);
для определения размера ящика, а затем (если NextMsgSize>5) вызываем ReadFile(MailslotHandle, PChar(NewLine)^, NextMsgSize, MsgSize, nil); То, что считалось, - строка в формате строка From,#0,строка To,#0,строка Msg.

Если же NextMsgSize<5, То это левый NextMsgSize, поэтому просто фиктивно читаем его для удаления из ящика
ReadFile(MailslotHandle, DummyBuffer, NextMsgSize, MsgSize, nil);

P.S. И да простят меня Админы за презренные Дельфийские строки, ибо так нагляднее

937565678__netsend.dpr


Дата: Ноя 3, 2004 13:55:32

Теперь получившемуся приложению нужно придать переносимость... Вообще я не знаю, работает ли в Линукс служба сообщений? Если да то, как отправить и принять сообщение в этой операционной системе?


Дата: Ноя 4, 2004 09:08:09

„работает ли в Линукс служба сообщений? “

Наверняка она там есть, но не на NETBEUI.
Правда я видел какую-то поделку, умеющую
посылать сообщения, но увы не помню названия.
А про переносимость ты уже почти ответил :
надо smtp/pop3 использовать - это универсально,
но медленно.
Либо закладываться на что-то подобное ICQ,
но без серверов, с открытым кодом и портабельное.
Winpopup вряд ли тебе подойдет, т.к. в NT
и 98-м они совсем по-разному сделаны, IMHO.
В NT нет ящика, а есть очередь.


Дата: Ноя 10, 2004 18:12:21

Почтовые ящики - не в том смысле, что что-то@что-то.ru. Это такой механизм обмена данными между программами, работающими на одном или разных компьютерах. Это во-первых, во вторых я нашёл ссылку, в которой автор предлагал исходник программы под Виндовс и Линукс, которая мне и нужна (в Линукс, по описанию использовался SMB). Я послал письмо с предложением выслать мне копию, а он послал письмо, где послал меня. Точнее послал не он, а админы. Содержание непонятно, но ясно, что ответа я не дождусь...

А требования таковы: сообщения, посылаемые из-под Линукс моей программой должны ловиться в Виндовс обычным попапом и наоборот... Т.е. не факт, что клиент и сервер (если можно так их назвать) - моих рук дело (в противном случае я не обращался бы сюда)

P.S. Новая версия с исправленным багом


_1063908822__netsend.dpr


Дата: Ноя 11, 2004 15:10:57 · Поправил: valterg

„в Линукс, по описанию использовался SMB“

В чистом Линуксе SMB нет - его реализует
приложение Samba. Если тебя это устраивает,
тогда проблем нет, т.к. Samba вроде даже с текстами
распространялась.... Было какое-то приложение,
которое из Виндов в Линуксовую систему сообщения
посылала, но там другой протокол вроде.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.066