Текущий архив: 2004.11.14;
Скачать: CL | DM;
ВнизКак лучше посылать сообщения по сети? Найти похожие ветки
← →
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;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.04 c