Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.02;
Скачать: CL | DM;

Вниз

net send   Найти похожие ветки 

 
NightBlaze ©   (2004-03-03 23:16) [0]

Привет! Проблема в следующем: приотправке нет сенда с помощью следующей функции, сообщения доставляются только моему сегменту, т.е. 192.168.58.xxx. Если же хочу отправить сообщение на 192.168.5y.xxx, то оно не доставляется.
Подскажите plz в чем проблема.

...
const
NetApi32 = "NetApi32.dll";
function NetMessageBufferSend(
     servername:PWideChar ;
     msgname:PWideChar ;
     fromname:PWideChar ;
     buf:PWideChar ;
     buflen:DWORD):DWORD; stdcall;
...
implementation

function NetMessageBufferSend; external NetApi32 name "NetMessageBufferSend";
...
function SendLanMessage(FromName,ToName:String; Text:String):Boolean;
 var RName,TName,HostName: LPCWSTR;
     buf: Pointer;
     size: Integer;
 begin
   Result:=True;
   HostName:=nil;
   
   size := SizeOf (WideChar) * Length (FromName)+1;
   GetMem (RName, Size);
   RName :=StringToWideChar (FromName, RName, Length (FromName)+1);
   size := SizeOf (WideChar) * Length (ToName)+1;
   GetMem (TName, Size);
   TName :=StringToWideChar (ToName, TName, Length (ToName) + 1);

   size := SizeOf (WideChar) * Length (text)+1;
   GetMem (buf, Size);
   try
     PWideChar(Buf) := StringToWideChar(text, buf, Length (text) + 1);
     if NetMessageBufferSend (HostName, rname, tname, buf, size) <> NO_ERROR
       then  Result:=False;
   finally
   FreeMem(buf);
   if assigned(TNAME) then FreeMem(TName);
   if assigned(RNAME) then FreeMem(RName);
   if assigned(HOSTNAME) then FreeMem(HOSTNAME);
 end;
end;


 
Rouse_ ©   (2004-03-04 09:18) [1]

Так как это функция - она возвращает результат.
Если результат не NO_ERROR, то какой он?


 
NightBlaze ©   (2004-03-04 12:46) [2]

Ф-цию я взял как раз из этого форума. :)


 
Rouse_ ©   (2004-03-04 12:57) [3]

Ты не понял, какой результат выполнения функции NetMessageBufferSend ?

Нельзя ж тупо передирать код, думать то тоже нужно...


 
NightBlaze ©   (2004-03-04 13:37) [4]

Если успешно, то: NERR_Success

Иначе:

ERROR_ACCESS_DENIED  The user does not have access to the               requested information.

ERROR_INVALID_PARAMETER  The specified parameter is invalid.

ERROR_NOT_SUPPORTED  This network request is not supported.

NERR_NameNotFound  The user name could not be found.

NERR_NetworkError  A general failure occurred in the network hardware.


 
Rouse_ ©   (2004-03-04 14:20) [5]

Блин ;)))
Ты что, не можешь понять, что я от тебя хочу?
В данном случае какой результат возвращает функция?!?!


 
NightBlaze ©   (2004-03-04 16:44) [6]

Че-то я не понимяю. Прописал в проге следующее:
...
var hRet: HRESULT;
...
if hRet=ERROR_ACCESS_DENIED then ShowMessage("ERROR_ACCESS_DENIED");

и так для каждой ошибки.
Так не разу оно мне собщение и не выдало...
я в тупике


 
Rouse_ ©   (2004-03-04 18:20) [7]

Ты цифру напиши чему hRet равен ;)


 
NightBlaze ©   (2004-03-04 18:23) [8]

2273


 
NightBlaze ©   (2004-03-04 18:28) [9]

Еще фишка в том, что если отправляешь в другой сегмент и указываешь
в поле "отправитель" свой IP или имя компа - доходит. Если что-то другое - нет.


 
Rouse_ ©   (2004-03-04 20:26) [10]

2273?
Это называется NERR_NameNotFound - The message alias could not be found on the network.

Отсюда и пляши...


 
Rouse_ ©   (2004-03-04 21:26) [11]

Вот тебе на всякий случай еще один код.
Потестируй его, а там и посмотрим:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Spin;

type
 TForm1 = class(TForm)
   Edit1: TEdit;
   Edit2: TEdit;
   Edit3: TEdit;
   Button1: TButton;
   Memo1: TMemo;
   Label1: TLabel;
   Label2: TLabel;
   Label3: TLabel;
   Label4: TLabel;
   SpinEdit1: TSpinEdit;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

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;

end.


Это аналог net send-а

Если не будет работать - не поленись и приведи коды ошибок...



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

Текущий архив: 2004.05.02;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.026 c
1-1082039150
Franzy
2004-04-15 18:25
2004.05.02
Invalid Pointer Operation после завершения программы


4-1078770825
Labert
2004-03-08 21:33
2004.05.02
WM_DRAWITEM и WM_PAINT


8-1075539841
kirilllius
2004-01-31 12:04
2004.05.02
Масштабирование изображения


14-1081846347
NeyroSpace
2004-04-13 12:52
2004.05.02
Искал я армейские присказки


1-1081978534
BAY
2004-04-15 01:35
2004.05.02
OpenGL