Delphi如何实现向指定的IP或者计算机名地址发送消息,一般是在局域网内比较实用了,象在DOS下面Net Send 命令一样。例如:
执行 Net Send 192.192.192.192(或者计算机名:Server) “I Love you!”
对方机器就可收到一个有“I Love you!”的MSGBOX。
Delphi里面的命令该如何实现呢?有人向我推荐WinexecShell,但是不好用,也可能不会用吧!还请各位大侠指教!
现行谢过了!

解决方案 »

  1.   

    name:='192.168.1.19'   ;
    msg:='sdsdfsdf';
    str:='net send '+name+' '+msg;
    winexec(pchar(str),SW_HIDE);
      

  2.   

    server:Tserversocket;
    var 
    i:integer;
    count:integer;
    begin
    count:=server.socket.activeconnections;
    for i:=1 to count-1 do 
       server.socket.connections[i].sendtext(editsend.text);
    editsend.text 为需要发送的信息
      

  3.   

    indy udpclient
    udpclient.send(AHost: string;APort: integer;Adata: string);
      

  4.   

    看看:NetMessageBufferSend这个Api
    也有这样的控件,TurobPower3.0 的sys tools 组件包
      

  5.   


    参照sys tools 的代码,给你写一个demo
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;
    type
        NET_API_STATUS       =   DWord;
        TLMWideChar = record
            Value : PWideChar;
            Length: DWord;
        end;
        TNetMessageBufferSend          = function(ServerName, MsgName, FromName: LPCWSTR; Buffer: Pointer; BufferLen: DWord): NET_API_STATUS; stdcall;
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}
    procedure CvtToWideChar(const S: string; var WS: TLMWideChar);
    var
      S1 : string;
    begin  if WS.Value <> nil then
        FreeMem(WS.Value, WS.Length);
      S1 := Trim(S);
      if Length(S1) > 0 then begin
        WS.Length := (Length(S1) + 1) * 2;
        GetMem(WS.Value, WS.Length);
        StringToWideChar(S1, WS.Value, WS.Length);
      end else begin
        WS.Length := 0;
        WS.Value := nil;
      end;
    end;const  _NetMessageBufferSend : TNetMessageBufferSend  = nil;procedure send(servername:String;msgname:String;fromname:String;info:String);
    var
      NETAPI32    : THandle ;
        S, M, F : TLMWideChar;
      Buffer : TLMWideChar;
    begin
      NETAPI32 := LoadLibrary('netapi32.dll') ;
      if (@_NetMessageBufferSend = nil) then
          @_NetMessageBufferSend := GetProcAddress(NETAPI32, 'NetMessageBufferSend');    if (@_NetMessageBufferSend <> nil) then begin
          S.Value := nil;
          M.Value := nil;
          F.Value := nil;
          Buffer.Value := nil ;
          try
            CvtToWideChar(info, Buffer);
            CvtToWideChar(ServerName, S);
            CvtToWideChar(MsgName, M);
            CvtToWideChar(FromName, F);
            _NetMessageBufferSend(S.Value, M.Value, F.Value, Buffer.Value , Buffer.Length );
          finally
            FreeMem(S.Value, S.Length);
            FreeMem(M.Value, M.Length);
            FreeMem(F.Value, F.Length);
          end;
        end else exit ;end;
    procedure TForm1.Button1Click(Sender: TObject);
    var
      NETAPI32    : THandle ;
        S, M, F : TLMWideChar;
      Buffer : TLMWideChar;
    begin
     send('192.168.0.106','192.168.0.106','独孤求败','测试');
     //说明 send(目标地址,本级地址,消息显示的本机名称,消息内容);
    end;end.
      

  6.   

    以上代码是使用'netapi32.dll'的NetMessageBufferSend函数
      

  7.   

    上面的说明错了
     send('192.168.0.106','192.168.0.175','独孤求败','你哀求');
     //说明 send(本机地址,目标地址,消息显示的本机名称,消息内容);
    不好意思:)
      

  8.   

    妈的!csdn非得逼我用马甲