Текущий архив: 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