想用Indy的UDP组件自己做一个类似QQ的局域网聊天程序,大家上班时用。现在的问题是当用户上线时是发个广播消息吗?让在线人都知道,如果是的话,这个广播消息怎么发呢?

解决方案 »

  1.   


    delphi7 
    indy9unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, IdUDPClient, IdBaseComponent, IdComponent, IdUDPBase,
      IdUDPServer,IdStack,IdSocketHandle;type
      TForm1 = class(TForm)
        Button1: TButton;
        IdUDPServer1: TIdUDPServer;
        IdUDPClient1: TIdUDPClient;
        ListBox1: TListBox;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
          ABinding: TIdSocketHandle);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
    //--xxx.xxx.xxx.255 是你的广播地址
    self.IdUDPClient1.Send('192.168.1.255',99999,GStack.LocalAddress);
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
    self.IdUDPServer1.DefaultPort:=99999;
    self.IdUDPServer1.Active:=True;
    end;procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
      ABinding: TIdSocketHandle);
    var
      strStream:TStringStream;
    begin
      strStream:= TStringStream.Create('');
      try
        strStream.CopyFrom(AData,AData.Size);
        listbox1.Items.Add(strStream.DataString+'上线了');
      except
      end;
    end;end.
      

  2.   

    procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
      ABinding: TIdSocketHandle);
    var
      strStream:TStringStream;
    begin
      strStream:= TStringStream.Create('');
      try
        strStream.CopyFrom(AData,AData.Size);
        listbox1.Items.Add(strStream.DataString+'上线了');
      except
      end;
      strStream.Free;
    end;
      

  3.   

    //--xxx.xxx.xxx.255 是你的广播地址
    是什么意思?是我的iP地址吗?
    你这种方法是向一个地址广播吗?我的意思是向所有iP地址广播,是不是UDP协议有这个功能呢?
      

  4.   

    IdUDPServer1.BroadCastEnabled:=true;
    IdUDPServer1.BrodCast(Port,aMessage)
      

  5.   

    delphi7 
    indy9unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, IdUDPClient, IdBaseComponent, IdComponent, IdUDPBase,
      IdUDPServer,IdStack,IdSocketHandle;type
      TForm1 = class(TForm)
        Button1: TButton;
        IdUDPServer1: TIdUDPServer;
        IdUDPClient1: TIdUDPClient;
        ListBox1: TListBox;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
          ABinding: TIdSocketHandle);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
    //--xxx.xxx.xxx.255 是你的广播地址
    self.IdUDPClient1.Send('192.168.1.255',99999,GStack.LocalAddress);
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
    self.IdUDPServer1.DefaultPort:=99999;
    self.IdUDPServer1.Active:=True;
    end;procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
      ABinding: TIdSocketHandle);
    var
      strStream:TStringStream;
    begin
      strStream:= TStringStream.Create('');
      try
        strStream.CopyFrom(AData,AData.Size);
        listbox1.Items.Add(strStream.DataString+'上线了');
      except
      end;
    end;end.
      

  6.   


    这种方法要有服务器端,而且最好自己定个协议建议使用idtcpserver,idtcpclient