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

Вниз

Поблема с NetMessageBufferSend   Найти похожие ветки 

 
sucer   (2004-02-27 14:15) [0]

Отправляю сообщение по локальной сети функцией
NetMessageBufferSend.ВСЕ РАБОТАЕТ, НО ЕСЛИ указать
ip адресс которого сейчас нет в сети(компьютер с таким ip выключен или вообще такого адресса нет), то программа "задумываеться" приблизительно на 10 секунд.
Как сделать чтобы она "не задумывалась"(выполнила функцию и не ждала результата).Может есть подобная другая функция,подскажите кто знает?

Отправляю сообщения в WINXP и WIN2000

----------------------------------------------------------
procedure TfrmNetSend.Button1Click(Sender: TObject);
var
 PWSInfo: Pointer;
 buflen,SIze: DWORD;
 theText:string;
 theRemoteHostName: String;
 theLocalHostName: String;
 msgname: LPWSTR;
 fromname: LPWSTR;
 buf: Pointer;
begin
  TheText:="OnlyTest click";
  TheRemoteHostName:="192.168.1.59";
  theLocalHostName:="IZVINI ADRESA NET";
  {-KOMU-}
  Size:=SizeOf(WideChar)*Length(theRemoteHostName)+1; //+1 ?? 0
  msgname:=LPWSTR(GetMemory(Size));
  StringToWideChar(theRemoteHostName,msgname,Size);//???????? ??? ????? ?
  {-SOOBJENIE-}
  Size:=SizeOf(WideChar)*Length(theText)+1; //+1 ?? 0
  buf:=LPWSTR(GetMemory(Size));
  StringToWideChar(theText,buf,Size);//???????? ????? ? UNICODE
  {-OT KOGO- //MOJNO NUL}
  Size:=SizeOf(WideChar)*Length(theLocalHostName)+1; //+1 ?? 0
  fromname:=LPWSTR(GetMemory(Size));
  StringToWideChar(theLocalHostName,fromname,Size);//???????? ??? ????? ?
  buflen:=DWORD(SizeOf(WideChar)*Length(theText)+1);
  NetMessageBufferSend(
       nil{servername},
       msgname,
       fromname{nil fromname},
       buf,{?????????}
       buflen);
end;

----------------------------------------------------------------
The NetMessageBufferSend function sends a buffer of information to a registered message alias.

Security Requirements

No special group membership is required to execute NetMessageBufferSend on a LAN Manager or Windows NT system. Admin, Accounts, Print, or Server operator group membership is required to successfully execute NetMessageBufferSend on a remote server.

NET_API_STATUS NetMessageBufferSend(

   LPTSTR servername,
   LPTSTR msgname,
   LPTSTR fromname,
   LPBYTE buf,
   DWORD buflen
  );


Parameters

servername

Pointer to a Unicode string containing the name of the remote server on which the function is to execute. A NULL pointer or string specifies the local computer.

msgname

Pointer to a Unicode string containing the message name to which the message buffer should be sent.

fromname

Pointer to a Unicode string containing the message name sending the information. The fromname parameter is new for Windows networking. This parameter is needed for sending interrupting messages from the computer name rather than the logged on user. If NULL is specified, the message is sent from the logged-on user as with LAN Manager 2.x.

buf

Pointer to a buffer of message text.

buflen

The length, in bytes, of the message text in buf.


 
Rouse_ ©   (2004-02-27 14:18) [1]

Отправляй в отдельном потоке.
Или используй отпавку на mailslot "\\имя\mailslot\messengr"


 
sucer   (2004-02-27 14:30) [2]

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

"отпавку на mailslot "\\имя\mailslot\messengr"" - поясните пожалуста по подробнее(небольшой кусок кода) как это делать?Я не понимаю...


 
Rouse_ ©   (2004-02-27 15:40) [3]

Что-то вроде этого

procedure TForm1.Button1Click(Sender: TObject);
var
 MSHandle: THandle;
 MSMessage: array [0..2] of String;
 ResultMsMessage: String;
 MSWrite: DWORD;
 ServerName: String;
begin
 ServerName := Edit1.Text;
 if ServerName = "" then ServerName := "*\";
 if ServerName[Length(ServerName)] <> "\" then ServerName := ServerName + "\";

 MSHandle := CreateFile(PChar("\\" + ServerName + "mailslot\messngr"),
   GENERIC_WRITE,// or GENERIC_READ,
   FILE_SHARE_READ,
   nil,
   OPEN_EXISTING,
   FILE_ATTRIBUTE_NORMAL,
   0);
 if not Win32Check(MSHandle <> INVALID_HANDLE_VALUE) then Exit;

 MSMessage[0] := Edit2.Text;
 MSMessage[1] := Edit3.Text;
 MSMessage[2] := Memo1.Text;

 CharToOem(PChar(MSMessage[0]), PChar(MSMessage[0]));
 CharToOem(PChar(MSMessage[1]), PChar(MSMessage[1]));
 CharToOem(PChar(MSMessage[2]), PChar(MSMessage[2]));

 ResultMsMessage := MSMessage[0] + #0 + MSMessage[1] + #0 + MSMessage[2];

 WriteFile(MSHandle, Pointer(PChar(ResultMsMessage))^, Length(ResultMsMessage), MSWrite, nil);
 Win32Check(MSWrite = Length(ResultMsMessage));
 CloseHandle(MSHandle);
end;


 
sucer   (2004-02-29 06:43) [4]

на этом возникает ошибка...
CharToOem(PChar(MSMessage[0]), PChar(MSMessage[0]));
CharToOem(PChar(MSMessage[1]), PChar(MSMessage[1]));
CharToOem(PChar(MSMessage[2]), PChar(MSMessage[2]));


 
VMcL ©   (2004-02-29 13:13) [5]

>>sucer  (29.02.04 06:43) [4]
>на этом возникает ошибка...

Это очень плохо.

P.S. А не будешь ли ты так любезен написать, какая именно ошибка, чтобы те, кто пытается тебе помочь не занимались развитием своих телепатических способностей?



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

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

Наверх




Память: 0.47 MB
Время: 0.035 c
6-1078175573
TALLA
2004-03-02 00:12
2004.04.25
Как избавиться от многопоточности DdeClientConv ? :(


6-1077882018
sucer
2004-02-27 14:40
2004.04.25
Как проверить подключен ли сейчас к сети комп c ip 192.168.x.y?


3-1080446567
GetIt
2004-03-28 08:02
2004.04.25
paradox с паролем


4-1077731833
Labert
2004-02-25 20:57
2004.04.25
Как эффективнее реализовать непрямоугольную кнопку?


3-1080716116
Hawk2
2004-03-31 10:55
2004.04.25
Почему Commit не отсылает данные на сервер?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский