Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];

Вниз

Как лучше посылать сообщения по сети?   Найти похожие ветки 

 
Joni Qwest   (2004-07-07 11:42) [0]

Пишу мессенджер для локалки. Пробовал много способов передачи сообщений, но все оказались немного не удовлетворяющими моим запросам. Например:
1. Использовал компоненты TServerSocket и TClientSocket - очень уж трудоёмко (надо коннектится и уж тогда отправлять данные), да и когда разрываешь одно из активных соединений, то вылетает ошибка сокета. Ещё не додумался как передавать форматированный текст.
2. Использовал компоненты TidUDPServer и TidUDPClient - очень клёво, быстро, просто, но не узнаешь получил ли адресат твоё сообщение.
3. Использовал поточные компоненты, но там не додумался как отредактировать входящий текст, ведь в нём по мимо сообщения содержится другая информация (о пользователе и т.д.)

Может кто нибудь уже встречался с данным вопросом? Помогите пожалуйста, программеры, может советом, может исходничком. Очень бы хотелось быстро и просто передавать форматированный текст и картинки. Для ввода текста и графической информации использую RxRichEdit. Могу заплатить за хороший, полный пример. Что не понятно спрашивайте.


 
Digitman ©   (2004-07-07 12:06) [1]


> хотелось быстро и просто передавать


хочешь "быстро" и имеешь при этом ЛВС под управлением ОС от Майкрософт - используй именованые программные каналы (Named Pipes), они гарантируют доставку и используют протокол NetBIOS, который гораздо эффективней в такой сети нежели протокол TCP

хочешь "просто" и имеешь при этом ЛВС под управлением ОС от Майкрософт - используй мэйлслоты (Mail Slots), они НЕ гарантируют доставку, НЕ сложней в использовании, но эффективней UDP

о программных каналах и мэйлслотах читай в MSDN и станд.справке Делфи по Win32API


> Использовал компоненты TServerSocket и TClientSocket - очень
> уж трудоёмко (надо коннектится и уж тогда отправлять данные),


что ж тут трудоемкого ? разумеется, коннект нужен, ибо компоненты эти используют connection oriented протокол TCP


> когда разрываешь одно из активных соединений, то вылетает
> ошибка сокета


ну и что ? просто нужно четко представлять себе, как грамотно обрабатывать ошибки


> Ещё не додумался как передавать форматированный текст


если речь идет о RichEdit, то форматированный текст - это обычный текст, включающий в себя управляющие символы тэгов форматирования


> Использовал компоненты TidUDPServer и TidUDPClient - очень
> клёво, быстро, просто, но не узнаешь получил ли адресат
> твоё сообщение


почему бы адресату в ответ не послать подтверждение приема ?


> Использовал поточные компоненты


а это еще что такое ?


> Для ввода текста и графической информации использую RxRichEdit


да ради бога.. но к сетевому транспорту это не имеет отношения


 
Rouse_ ©   (2004-07-07 12:30) [2]

Поищи тут же примеры использования NetMessageBufferSend
если не найдешь:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/netmgmt/netmgmt/netmessagebuffersend.asp


 
Sch   (2004-07-07 12:37) [3]

Не в тему, но все же...

А не работает. То есть для одной рабочей группы (именно workgroup, не domen) работает, для другой - не для всех пользователей, вообще почти не для кого. хотя под NT4 все было тип топ и используется без каких либо изменений, только поменян NT4 на 2003Server.
Дает

C:\>net send ludmila BUM-BUM
The message was successfully sent to LUDMILA.

C:\>net send Svetlana BUM-BUM
An error occurred while sending a message to SVETLANA.

The message alias could not be found on the network.

More help is available by typing NET HELPMSG 2273.

C:\>net send Sch test
The message was successfully sent to SCH.

LUDMILA, Sch,Svetlana - все в Vakars, сервер - в Workgroup (там всем доходит, кроме WinMe)...
Все компы врублены, на всех traypopup(вместо winpopup). В чем дело, непонятно...


 
Sch   (2004-07-07 12:38) [4]

"А не работает. "- в смысле, net send у меня не работает под Win2003Server на всех...


 
Дмитрий Ботвин   (2004-08-13 11:01) [5]

Лови код, у меня нормально пашет:

Uses Winsvc;

procedure TForm6.SendButtonClick(Sender: TObject);
 var i: integer;
     SList: TStringList;
     Msg: String;
     HostName,MessageName: WideString;
     buflen: DWORD;
     error: NET_API_STATUS;
 begin
   if Length(SendUser.Text)=0 then
      begin
         Application.MessageBox("Не указан пользователь, от имени которого отправляем!","Ошибка",MB_OK+MB_ICONSTOP);
         exit;
      end;
   if Length(Form1.CompName.Text)<>0 then
     begin
       HostName:=WideString(Trim(Form1.CompName.Text));
       MessageName:=WideString(Trim(SendText.Text));
       buflen:=200;
       error:=NetMessageBufferSend(nil,PWideChar(HostName),PWideChar(WideString(Trim(SendUser.Text))),PWideChar(MessageName),bu flen);
       if error=NERR_Success then Application.MessageBox("Сообщение успешно отправлено!","Отправка сообщений",MB_OK+MB_ICONINFORMATION)
       else Application.MessageBox("Сообщение не отправлено!"+#13#10+"Проверьте состояние службы сообщений","Отправка сообщений",MB_OK+MB_ICONSTOP);
       Form6.Close;
     end
   else
     begin
       SList:=TStringList.Create;
       for i:=0 to Form1.Computers.Items.Count-1 do
          begin
            HostName:=WideString(Trim(Form1.Computers.Items[i].Caption));
            MessageName:=WideString(Trim(SendText.Text));
            buflen:=200;
            error:=NetMessageBufferSend(nil,PWideChar(HostName),PWideChar(WideString(Trim(SendUser.Text))),PWideChar(MessageName),bu flen);
            if error<>NERR_Success then SList.Add(Form1.Computers.Items[i].Caption);
            Label3.Caption:="Отправлено собщение на "+IntToStr(i+1)+" из "+IntToStr(Form1.Computers.Items.Count);
            Application.ProcessMessages;
          end;
       if SList.Count=0 then Application.MessageBox("Сообщение успешно отправлено на все компьютеры!","Отправка сообщений",MB_OK+MB_ICONINFORMATION)
       else
          begin
             for i:=0 to SList.Count-1 do
                if i<SList.Count-1 then Msg:=Msg+SList.Strings[i]+", "
                else Msg:=Msg+SList.Strings[i];
             Application.MessageBox(PChar("Не смог отправить сообщение на следующие компьютеры: "+Msg),"Отправка сообщений",MB_OK+MB_ICONEXCLAMATION)
          end;
       Form6.Close;
     end;
 end;


 
Рамиль ©   (2004-08-13 11:08) [6]


> "А не работает. "- в смысле, net send у меня не работает
> под Win2003Server на всех...

С DNS проблемы, скорее всего.


 
taliano   (2004-08-17 14:03) [7]

>>Sch
A сервис Messenger на Svetlana запущен?


 
deff   (2004-09-05 00:47) [8]

да там может, маршрутизатор на пути рубит левые пакеты


 
Alex Konshin ©   (2004-09-05 05:06) [9]

А если в команде указать еще и имя домена?



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.047 c
6-1094132569
sniknik
2004-09-02 17:42
2004.11.14
UDP протокол на базе Мелкософтского клиента


11-1082719819
BolikDimon
2004-04-23 15:30
2004.11.14
Использование KOL в БД-приложениях


1-1098960063
_Kirill_
2004-10-28 14:41
2004.11.14
Способы хранения на диске большого кол-ва переменных НЕ в БД


14-1099035098
pppp
2004-10-29 11:31
2004.11.14
Информация к размышлению


3-1097730747
JohnS
2004-10-14 09:12
2004.11.14
Экспорт импорт данных в таблицы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский