Как принять и отправить сообщение?

Тема в разделе "WASM.NETWORKS", создана пользователем dmit10, 27 окт 2004.

  1. dmit10

    dmit10 New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2004
    Сообщения:
    37
    Адрес:
    Russia
    Нужно быстро написать попап (программа, отсылающая-как net send- и принимающая сообщения(причем иногда на группу компов одновременно(широковещание, как я понимаю))). Какие функции позволяют это делать? Помочь может всё. Особенно исходник...
     
  2. dmit10

    dmit10 New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2004
    Сообщения:
    37
    Адрес:
    Russia
    Видимо, фиктивный ответ самому себе - лучший способ привлечь внимание к теме на этом сайте. Господа создатели форума: сделайте так чтобы недавно созданные темы тоже появлялись при входе в форум по понятным причинам.
     
  3. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Не совсем так. Кто-то из модераторов (не я, в данном случае) решил поместить это в HELHEIM. Причину см. в правилах. Однако я так понимаю, ты поленился погуглить.
     
  4. dmit10

    dmit10 New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2004
    Сообщения:
    37
    Адрес:
    Russia
    НЕПРАВДА! Во-первых, в 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 - имя моего компа в сети.

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



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

    Stub New Member

    Публикаций:
    0
    Регистрация:
    11 май 2004
    Сообщения:
    311
    Адрес:
    Siberia
    А у тебя служба Messenger включена?

    Передавать надо именно в Unicode, в описании четко прописано LPCWSTR
    Код (Text):
    1. NET_API_STATUS NetMessageBufferSend(
    2. LPCWSTR servername,
    3. LPCWSTR msgname,
    4. LPCWSTR fromname,
    5. LPBYTE buf,
    6. DWORD buflen
    7. )
     
  6. Stub

    Stub New Member

    Публикаций:
    0
    Регистрация:
    11 май 2004
    Сообщения:
    311
    Адрес:
    Siberia
    Еще способ - заюзать net send :)
     
  7. Stub

    Stub New Member

    Публикаций:
    0
    Регистрация:
    11 май 2004
    Сообщения:
    311
    Адрес:
    Siberia
    Вот я тут попробовал накодить эту штуку :), получилось конечно ужасно (потестить не могу, т.к. нет у меня сетки да и сервиса нужного). В архивчике еще несколько примеров по теме на других языках...

    [​IMG] 1676044022__NetSend.zip
     
  8. dmit10

    dmit10 New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2004
    Сообщения:
    37
    Адрес:
    Russia
    Messenger, как я понимаю, во время теста должна быть отключена.

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



    Пример я проверю сегодня же(спасибо большое)

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

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105




    Все гораздо хуже. Советую начать от Адама.

    В 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,

    но это я оставляю тебе....
     
  10. stbzh

    stbzh New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2004
    Сообщения:
    16
    Адрес:
    Ukraine
    А почему нельзя использовать сокеты, создать тот же клиент-сервер на UDP?

    или необходимо именно из 98 посылать аналог net send на машины с 2000?
     
  11. dmit10

    dmit10 New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2004
    Сообщения:
    37
    Адрес:
    Russia
    Ура!! Нашёл. Набрал в Яндексе что-то вроде 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. И да простят меня Админы за презренные Дельфийские строки, ибо так нагляднее

    [​IMG] 937565678__netsend.dpr
     
  12. dmit10

    dmit10 New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2004
    Сообщения:
    37
    Адрес:
    Russia
    Теперь получившемуся приложению нужно придать переносимость... Вообще я не знаю, работает ли в Линукс служба сообщений? Если да то, как отправить и принять сообщение в этой операционной системе?
     
  13. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105




    Наверняка она там есть, но не на NETBEUI.

    Правда я видел какую-то поделку, умеющую

    посылать сообщения, но увы не помню названия.

    А про переносимость ты уже почти ответил :

    надо smtp/pop3 использовать - это универсально,

    но медленно.

    Либо закладываться на что-то подобное ICQ,

    но без серверов, с открытым кодом и портабельное.

    Winpopup вряд ли тебе подойдет, т.к. в NT

    и 98-м они совсем по-разному сделаны, IMHO.

    В NT нет ящика, а есть очередь.
     
  14. dmit10

    dmit10 New Member

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



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



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



    [​IMG] _1063908822__netsend.dpr
     
  15. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105




    В чистом Линуксе SMB нет - его реализует

    приложение Samba. Если тебя это устраивает,

    тогда проблем нет, т.к. Samba вроде даже с текстами

    распространялась.... Было какое-то приложение,

    которое из Виндов в Линуксовую систему сообщения

    посылала, но там другой протокол вроде.
     
  16. dmit10

    dmit10 New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2004
    Сообщения:
    37
    Адрес:
    Russia
    "проблем нет"



    проблема есть, и её я сформулировал. Если её решение тебе очевидно, то пожалуйста напиши его.



    P.S. А как вы так кавычки красиво ставите (в цитатах) и программный код оформляете. Нигде про это не написано, а я тоже так хочу.
     
  17. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    dmit10



    Так правильно, если только спрашивать и не

    смотреть по сторонам, можно вообще все пропустить.

    Смотри : "Ваш ответ", куча "украшателей",

    а в конце то ,что ты пропустил - "Что это?"

    Ведь под самым носом положили... :)
     
  18. dmit10

    dmit10 New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2004
    Сообщения:
    37
    Адрес:
    Russia
    Может, ссылку дашь? Я не нашёл, а ты всё загадки загадываешь
     
  19. Stub

    Stub New Member

    Публикаций:
    0
    Регистрация:
    11 май 2004
    Сообщения:
    311
    Адрес:
    Siberia


    Вот посмотри :)

    А вот ссылка BBCodes



    [​IMG] 1889513055__scr.zip
     
  20. dmit10

    dmit10 New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2004
    Сообщения:
    37
    Адрес:
    Russia