![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как лучше посылать сообщения по сети? [D7, Win95/98, WinME, Win2k, WinXP]
Joni Qwest © (2004-07-07 11:42:00)Пишу мессенджер для локалки. Пробовал много способов передачи сообщений, но все оказались немного не удовлетворяющими моим запросам. Например:
1. Использовал компоненты TServerSocket и TClientSocket - очень уж трудоёмко (надо коннектится и уж тогда отправлять данные), да и когда разрываешь одно из активных соединений, то вылетает ошибка сокета. Ещё не додумался как передавать форматированный текст.
2. Использовал компоненты TidUDPServer и TidUDPClient - очень клёво, быстро, просто, но не узнаешь получил ли адресат твоё сообщение.
3. Использовал поточные компоненты, но там не додумался как отредактировать входящий текст, ведь в нём по мимо сообщения содержится другая информация (о пользователе и т.д.)
Может кто нибудь уже встречался с данным вопросом? Помогите пожалуйста, программеры, может советом, может исходничком. Очень бы хотелось быстро и просто передавать форматированный текст и картинки. Для ввода текста и графической информации использую RxRichEdit. Могу заплатить за хороший, полный пример. Что не понятно спрашивайте.
Alex Konshin (2004-09-05 05:06:00) [1]А если в команде указать еще и имя домена?
deff (2004-09-05 00:47:00) [2]да там может, маршрутизатор на пути рубит левые пакеты
taliano (2004-08-17 14:03:00) [3]>>Sch
A сервис Messenger на Svetlana запущен?
Рамиль (2004-08-13 11:08:00) [4]
> "А не работает. "- в смысле, net send у меня не работает
> под Win2003Server на всех...
С DNS проблемы, скорее всего.
Дмитрий Ботвин (2004-08-13 11:01:00) [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;
Sch (2004-07-07 12:38:00) [6]"А не работает. "- в смысле, net send у меня не работает под Win2003Server на всех...
Sch (2004-07-07 12:37:00) [7]Не в тему, но все же...
А не работает. То есть для одной рабочей группы (именно 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). В чем дело, непонятно...
Rouse_ (2004-07-07 12:30:00) [8]Поищи тут же примеры использования NetMessageBufferSend
если не найдешь:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/netmgmt/netmgmt/netmessagebuffersend.asp
Digitman (2004-07-07 12:06:00) [9]
> хотелось быстро и просто передавать
хочешь "быстро" и имеешь при этом ЛВС под управлением ОС от Майкрософт - используй именованые программные каналы (Named Pipes), они гарантируют доставку и используют протокол NetBIOS, который гораздо эффективней в такой сети нежели протокол TCP
хочешь "просто" и имеешь при этом ЛВС под управлением ОС от Майкрософт - используй мэйлслоты (Mail Slots), они НЕ гарантируют доставку, НЕ сложней в использовании, но эффективней UDP
о программных каналах и мэйлслотах читай в MSDN и станд.справке Делфи по Win32API
> Использовал компоненты TServerSocket и TClientSocket - очень
> уж трудоёмко (надо коннектится и уж тогда отправлять данные),
что ж тут трудоемкого ? разумеется, коннект нужен, ибо компоненты эти используют connection oriented протокол TCP
> когда разрываешь одно из активных соединений, то вылетает
> ошибка сокета
ну и что ? просто нужно четко представлять себе, как грамотно обрабатывать ошибки
> Ещё не додумался как передавать форматированный текст
если речь идет о RichEdit, то форматированный текст - это обычный текст, включающий в себя управляющие символы тэгов форматирования
> Использовал компоненты TidUDPServer и TidUDPClient - очень
> клёво, быстро, просто, но не узнаешь получил ли адресат
> твоё сообщение
почему бы адресату в ответ не послать подтверждение приема ?
> Использовал поточные компоненты
а это еще что такое ?
> Для ввода текста и графической информации использую RxRichEdit
да ради бога.. но к сетевому транспорту это не имеет отношения