我这里有一段关于局域网的,不知道你感不感兴趣:
unit Main;interfaceuses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, NMUDP, ComCtrls;type
  TFrmChat = class(TForm)
    NMUDP1: TNMUDP;
    EditIP: TEdit;
    EditPort: TEdit;
    EditMyTxt: TEdit;
    CbName: TComboBox;
    BtSend: TButton;
    BtClear: TButton;
    MemoReceive: TMemo;
    SaveDialog1: TSaveDialog;
    BtSave: TButton;
    StatusBar1: TStatusBar;
    MeSendTxt: TMemo;
    procedure BtSendClick(Sender: TObject);
    procedure NMUDP1DataReceived(Sender: TComponent; NumberBytes: Integer;
      FromIP: String; Port: Integer);
    procedure NMUDP1InvalidHost(var handled: Boolean);
    procedure NMUDP1DataSend(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure BtClearClick(Sender: TObject);
    procedure BtSaveClick(Sender: TObject);
    procedure EditMyTxtKeyPress(Sender: TObject; var Key: Char);
    procedure MeSendTxtKeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
   Function Trun_ip(S:string):string;
var
  FrmChat: TFrmChat;implementation{$R *.DFM}Function Trun_ip(S:string):string;
var s1,s2,s3,ss,sss,Head:string;
    n,m:integer;
begin
 sss:=S;
 n:=pos('.',s);
 s1:=copy(s,1,n);
 m:=length(s1);
 delete(s,1,m);
 Head:=copy(s1,1,(length(s1)-1));
 n:=pos('.',s);
 s2:=copy(s,1,n);
 m:=length(s2);
 delete(s,1,m);
 n:=pos('.',s);
 s3:=copy(s,1,n);
 m:=length(s3);
 delete(s,1,m);
 ss:=sss;
 if strtoint(Head) in [1..126] then ss:=s1+'255.255.255'; //1~126.255.255.255 (A类网)
 if strtoint(Head) in [128..191] then ss:=s1+s2+'255.255';//128~191.XXX.255.255(B类网)
 if strtoint(Head) in [192..254] then ss:=s1+s2+s3+'255'; //192~254.XXX.XXX.255(C类网)
  Result:=ss;
end;procedure TFrmChat.BtSendClick(Sender: TObject);
var
 MyStream: TMemoryStream;
 MySendTxt: String;
 Iport,icode:integer;
 PcUser:PChar;
 DwUSize:DWORD;
Begin
 Val(EditPort.Text,Iport,icode);
 if icode<>0 then
  begin
   Application.MessageBox('端口必须为数字,请重新输入!','信息',MB_ICONINFORMATION+MB_OK);
   Exit;
  end;
 NMUDP1.RemoteHost := EditIP.Text; {远程主机}
 NMUDP1.LocalPort:=Iport; {本地端口}
 NMUDP1.RemotePort := Iport; {远程端口}
 MysendTxt := MeSendTxt.Lines.Text;
 //MySendTxt := EditMyTxt.Text;
 MyStream := TMemoryStream.Create; {建立流}
 try
  MyStream.Write(MySendTxt[1], Length(MeSendTxt.Text));{写数据}
 // MyStream.Write(MySendTxt[1], Length(EditMyTxt.Text));{写数据}
  NMUDP1.SendStream(MyStream); {发送流}
 // MemoReceive.Lines.Add('接收到来自主机'+FromIP+'的信息:'+MeSendTxt.Text);
  MeSendTxt.Clear;
 finally
  MyStream.Free; {释放流}
 end;
end;
procedure TFrmChat.NMUDP1DataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
var
MyStream: TMemoryStream;
MyReciveTxt,Name,Result: String;
PcUser,PcComputer :PChar;
DwUSize,dwCSize:DWORD;
begin
 MyStream := TMemoryStream.Create; {建立流}
 try
  NMUDP1.ReadStream(MyStream);{接收流}
  SetLength(MyReciveTxt,NumberBytes);{NumberBytes为接收到的字节数}
  MyStream.Read(MyReciveTxt[1],NumberBytes);{读内存流中所有的数据}   DwCSize := MAX_COMPUTERNAME_LENGTH + 1;
   DwUSize := 21; // 用户名长度不大于20个字符
   Name:='';
   Result:='';
   GetMem( pcUser, dwUSize );
   GetMem( pcComputer, dwCSize );
   try
      if Windows.GetUserName( pcUser, dwUSize ) then
         Name := pcUser;
      if Windows.GetComputerName( pcComputer, dwCSize ) then
         Result := pcComputer;
   finally
      FreeMem( PcUser );
      FreeMem(PcComputer);
   end;
  MemoReceive.Lines.Add('接收到来自主机'+FromIP+'的信息:'+MyReciveTxt);
  MemoReceive.Lines.Add('接收到来自主机'+Name+'的信息:'+MyReciveTxt);
  MemoReceive.Lines.Add('接收到来自主机'+Result+'的信息:'+MyReciveTxt);
 finally
  MyStream.Free; {释放流}
 end;
end;procedure TFrmChat.NMUDP1InvalidHost(var handled: Boolean);
begin
 Application.MessageBox('对方IP地址不正确,请重新输入!','信息',MB_ICONINFORMATION+MB_OK);
end;procedure TFrmChat.NMUDP1DataSend(Sender: TObject);
begin
 StatusBar1.SimpleText:='信息成功发出!';
end;procedure TFrmChat.FormCreate(Sender: TObject);
begin
 EditIP.Text:='127.0.0.1';
 EditPort.Text:='8868';
 BtSend.Caption:='发送';
 BtClear.Caption:='清除记录';
 BtSave.Caption:='保存记录';
 MemoReceive.ScrollBars:=ssBoth;
 MemoReceive.Clear;
 EditMyTxt.Text:='在这里输入信息,然后点击发送.'; StatusBar1.SimplePanel:=true;
end;procedure TFrmChat.BtClearClick(Sender: TObject);
begin
 MemoReceive.Clear;
end;procedure TFrmChat.BtSaveClick(Sender: TObject);
begin
 if SaveDialog1.Execute then MemoReceive.Lines.SaveToFile(SaveDialog1.FileName);
end;procedure TFrmChat.EditMyTxtKeyPress(Sender: TObject; var Key: Char);
begin
 if Key=#13 then BtSend.Click;
end;procedure TFrmChat.MeSendTxtKeyPress(Sender: TObject; var Key: Char);
begin
 if Key=#13 then BtSend.Click;
end;end.