这个简单用udp广播
一般把remotehost设为255.255.255.255理论上所有的电脑都可以收到
一般如果你是局域网
比如你的Ip = 192.168.0.1  则 广播的地址为 192.168.0.255以此类推

解决方案 »

  1.   

    建议你做几个UDP的示例程序,你就会知道了。给你一篇相关的文章,不错的,我就是从这篇东西起步的。用Delphi编写局域网中的UDP聊天程序  
        Internet盛行的今天,网上聊天已成为一种时尚。同时,各单位已建成了自己的局域网;能否在局域网上实现聊天呢?可以,网上到处都有这种工具。当然,我们可以拥有自己版权的聊天工具。
      User Datagram Protocol (UDP)协议,是一种无连接协议。在Delphi中利用这种协议,可以轻松的编写出聊天程序,以下的程序,在Delphi 5+Pwin98中通过。
      打开Delphi,新建Application
    放置以下几个控件:Panel1、Panel2,其属性如下:
      然后,放置以下控件:
    Edit1
    ListBox1
    Memo1
    Button1
    Button2
    BitBtn1
    Nmudp1
        其主要控件的属性如下:
      各主要控件的功能如下:
    现在的界面如下:
    源程序如下:
    unit main;
    interface
    uses
    Windows,messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,Buttons,ExtCtrls,NMUDP,Menus,ComCtrls,WinSock; file://增加WinSocktype
    TForm1 = class(TForm)
    NMUDP1: TNMUDP;
    Panel1: TPanel;
    Panel2: TPanel;
    Label1: TLabel;
    Edit1: TEdit;
    BitBtn1: TBitBtn;
    Memo1: TMemo;
    Panel3: TPanel;
    Panel4: TPanel;
    ListBox1: TListBox;
    Button1: TButton;
    Button2: TButton;
    procedure FormShow(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure NMUDP1DataReceived(Sender: TComponent; NumberBytes: Integer;
    FromIP: String; Port: Integer);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;var
    Form1: TForm1;
    ComputerName: array[0..127] of Char;implementation
    {$R *.DFM}procedure TForm1.FormShow(Sender: TObject);
    var
    sz: dword;
    begin
    sz := SizeOf(Computername);
    GetComputerName(ComputerNamesz);//得到本机的标识
    ListBox1.Items.Clear;
    ListBox1.Items.Add(’大家’);//在网友清单中,增加”大家”和
    ListBox1.Items.Add(ComputerName);//本机名称
    ListBox1.ItemIndex:=0;
    end;procedure TForm1.BitBtn1Click(Sender: TObject);
    var
    MyStream: TMemoryStream;
    TmpStr: String;
    i:integer;
    Begin
    if Edit1.Text<>’’ then file://如果所说的内容不为空则发送。
    begin
      NMUDP1.ReportLevel := Status_Basic;
      NMUDP1.RemotePort :=8888;//端口为:8888,可以自己定义,但必须与LocalPort相一致。
      if ListBox1.Items[ListBox1.ItemIndex]=ComputerName then
        Edit1.Text:=ComputerName+’自言自语道:’+Edit1.Text file://如果和自己对话.
      Else
        Edit1.Text:=ComputerName+’对’+ListBox1.Items[listbox1.itemindex]+’说:’+Edit1.Text; 
      TmpStr :=Edit1.text;
      MyStream := TMemoryStream.Create;
      try
         MyStream.Write(TmpStr[1],Length(Edit1.Text));
         if ListBox1.ItemIndex=0 then  begin
           for i:=1 to ListBox1.Items.Count-1 do begin file://如果选择”大家”,则对所有的网友发送信息
             NMUDP1.RemoteHost :=ListBox1.Items[i];//远程主机的名称或地址.
             NMUDP1.SendStream(MyStream);//发送信息.
           End;
         end 
         else begin 如果私聊
            NMUDP1.RemoteHost :=ListBox1.Items[ListBox1.itemindex]; file://仅对所选中的网友.
            NMUDP1.SendStream(MyStream);
          End;
      finally
        MyStream.Free;
      end;
      Edit1.Text:=’’;
      Edit1.SetFocus;
    end 
    else
    Edit1.SetFocus;
    end;procedure TForm1.NMUDP1DataReceived(Sender: TComponent;NumberBytes: Integer; FromIP:String; Port: Integer);
    var
    MyStream: TMemoryStream;
    TmpStr: String;
    begin
    MyStream := TMemoryStream.Create;
    try
      NMUDP1.ReadStream(MyStream);
      SetLength(TmpStrNumberBytes);
      MyStream.Read(TmpStr[1]NumberBytes);
      Memo1.Lines.Add(TmpStr); file://显示对话的内容.
    finally
      MyStream.Free;
    end;
    end;procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    var
    MyStream: TMemoryStream;
    TmpStr: String;
    i:integer;
    Begin
    if (key=#13) and (Edit1.Text<>’’) then file://如果所说的内容不为空,且最后一个按键为”Enter”则发送。
    begin
      NMUDP1.ReportLevel := Status_Basic;
      NMUDP1.RemotePort :=8888;
      if ListBox1.Items[ListBox1.ItemIndex]=ComputerName then
        Edit1.Text:=ComputerName+’自言自语道:’+Edit1.Text
      else
        Edit1.Text:=ComputerName+’对’+ListBox1.Items[listbox1.itemindex]+’说:’+Edit1.Text;
      TmpStr :=Edit1.text;
      MyStream := TMemoryStream.Create;
      try
        MyStream.Write(TmpStr[1],Length(Edit1.Text));
        if ListBox1.ItemIndex=0 then begin
          for i:=1 to ListBox1.Items.Count-1 do begin
             NMUDP1.RemoteHost :=ListBox1.Items[i];
             NMUDP1.SendStream(MyStream);
          end;
        end
        else begin
           NMUDP1.RemoteHost :=ListBox1.Items[ListBox1.itemindex];
           NMUDP1.SendStream(MyStream);
        end;
      finally
        MyStream.Free;
      end;
      Edit1.Text:=’’;
      edit1.SetFocus;
    end
    else
    Edit1.SetFocus;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
    InputString:String;
    begin file://增加网友,输入的可以是IP地址或计算机名称。
      InputString:=InputBox(’增加人员’,’IP地址或计算机名’,’’);
      if Inputstring<>’’ then ListBox1.Items.Add(Inputstring);
        ListBox1.ItemIndex:=0;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin file://删除当前选中的网友,但”大家”不能被删除.
    if ListBox1.ItemIndex<>0 then 
      ListBox1.Items.Delete(ListBox1.ItemIndex);
    end;
    end.    这样,一个简单的聊天工具就做好了,只要双方同时运行本程序,且将对方的计算机名称或IP地址加入到网友中即可实现实时聊天了一个属于自己版权的聊天程序,就这样编写成功了。程序运行时,自动加入两个网友:”大家”和本地计算机名称.当然,你可以增加更多的内容,使程序更加的完善,以求更多的功能。 
      

  2.   

    再补充一下,如果你用UDP协议来实现,那么所谓的向所有人广播消息,其实也就是分别向每一个IP地址发送一条数据流(NMUDP1.SendStream())。当然,前提是你和其它人必须采用同一端口,这个在上面的示例程序中可以看到。
      

  3.   

    那我的应为10.84.255.255啦,因为我们公司是10.84.xxx.xxx?
      

  4.   

    或者你用CLIENTSOCKET来做,当服务器ACCEPT一个客户机时就可以接受到数据了!再发一条广播
      

  5.   

    help!!!如何才可做到在A,B,C,3类局域网都可通用的方法。
      

  6.   

    help!!!如何才可做到在A,B,C,3类局域网都可通用的方法。
      

  7.   

    用IdUdp控件吧,它提供一个广播的方法。这个控件在Indy Server 或Indy Clients页