If you are to setup a server through a Local Area Network, you should use either DCOM (Distributed COM) or UDP (User Datagram Protocol)
Another and more secure way, is to make the client do a TCP/IP connection to the server at startup. Afterwards, it's very easy to control events and dataparsing. I can give you bright examples of this.
Odd - I always thought the U in UDP was for Unreliable in that the protocol does not in fact gurantee delivery of the packet. (at least it is in the Unix world...)
There is the good ol' WinPopup, which uses Mailslots. There is a Delphi implementation of WinPopup, including source, at http://djernaes.dk/martin/winpopup.html
0
Be seen. Boost your question’s priority for more expert views and faster solutions
I guess this might work. You have to declare the function first!
Like this:
interface
...
Function NetMessageBufferSend (
pServername,
pMsgName,
pFromname: PWideChar;
buf: pChar;
buflen: DWORD): UINT; stdcall;
external 'netapi32.dll' name 'NetMessageBufferSend';
implementation
{$R *.DFM}
procedure DoSendMessage(ServerName,Headline,From: String; Message: TStringList);
var
i,count: Integer;
begin
count:= 0;
For i:= 0 to message.Count-1 do Inc(Count,length(message.strings[i])+1);
If From='' then From:= #0; //uses the default loginName
NetMessageBufferSend(PWideChar(ServerName),
PWideChar(Headline),
PWideChar(From),
Message.GetText,
count);
End;
..
end.
Does that work? ..I'm sorry, that I cannot test it myself, I haven't got two computers, but the app seemed to be busy doing something hehe. :-)
Do you need further help, or is Williams comment enough?
The drawback with this method is: you can't handle the message yourself on the receiver end, unless you substitute the messenger service.
/// John
0
emiltorAuthor Commented:
I'm glad if you have any code John....
Williams have to explane his answer better - i don't understand it enought
If you go for Williams / johns answer, I think you should reject my answer...
0
emiltorAuthor Commented:
Sorry Blackman, when i go to the page you send me it doesn't work and now when i test again it works. and there is lots of stuff about my question ( "allright" )
Hi again,
Here's a simple unit with the functions supplied by Williams and some sample code:
unit NetMsg;
{ Example unit for sending messages over the network }
{ For users at experts-exchange, use freely at own risk }
{ created 1998-12-10 by John Johansson (erajoj) }
interface
uses Windows, Classes;
function NetMessageBufferSend(
pServername,
pMsgName,
pFromname,
pBuf: PWideChar;
dwBufLen: DWORD): UINT; stdcall;
external 'netapi32.dll' name 'NetMessageBufferSend';
{ Send strings to single recipient at optional server and with optional signature }
function DoSendMessage( pServerName, pFrom, pReceiver: PWideChar; rgsMsg: TStrings ): Boolean;
{ Send strings to multiple recipients at optional server and with optional signature }
function DoSendMessageEx( pServerName, pFrom: PWideChar; rgsReceiver, rgsMsg: TStrings ): Boolean;
{ Lightweight send strings to single recipient }
function SendMsg( sReceiver, sMessage: string ): Boolean;
implementation
function DoSendMessage( pServerName, pFrom, pReceiver: PWideChar; rgsMsg: TStrings ): Boolean;
var
sMsg: WideString;
begin
sMsg := rgsMsg.Text; { autoconvert from ansi to wide string }
Result := NetMessageBufferSend(
pServerName,
pReceiver,
pFrom,
PWideChar( sMsg ),
SizeOf( WideChar ) * ( Length( sMsg ) + 1 ) { 2 byte per char + zero terminator }
) = 0;
end;
function DoSendMessageEx( pServerName, pFrom: PWideChar; rgsReceiver, rgsMsg: TStrings ): Boolean;
var
sMsg: WideString;
iIndex: Integer;
begin
Result := True;
for iIndex := 0 to rgsReceiver.Count - 1 do
begin
sMsg := rgsReceiver[ iIndex ]; { autoconvert from ansi to wide string }
Result := Result and DoSendMessage( pServerName, pFrom, PWideChar( sMsg ), rgsMsg );
end;
end;
function SendMsg( sReceiver, sMessage: string ): Boolean;
var
sRec, sMsg: WideString;
begin
sRec := sReceiver; { autoconvert from ansi to wide string }
sMsg := sMessage; { autoconvert from ansi to wide string }
Result := NetMessageBufferSend(
nil,
PWideChar( sRec ),
nil,
PWideChar( sMsg ),
SizeOf( WideChar ) * ( Length( sMsg ) + 1 ) { 2 byte per char + zero terminator }
) = 0;
end;
Samples:
uses ..., netmsg;
...
procedure TMainForm.Button1Click(Sender: TObject);
begin
SendMsg( 'john', 'Hello! Let''s go out to lunch!' );
end;
procedure TMainForm.Button4Click(Sender: TObject);
begin
if not SendMsg( 'emiltor', 'Enough?' ) then
ShowMessage( 'Not good enough. Didn''t get through!' );
end;
end.
Can't really do any better than this right now...
Points go to Williams if this solution is sufficient.
The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.
One of a set of tools we're offering as a way of saying thank you for being a part of the community.
If you are to setup a server through a Local Area Network, you should use either DCOM (Distributed COM) or UDP (User Datagram Protocol)
Another and more secure way, is to make the client do a TCP/IP connection to the server at startup. Afterwards, it's very easy to control events and dataparsing. I can give you bright examples of this.
Which version of Delphi have you got?
regards,
Williams