转:
接受端:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
unit Unit2;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, Psock, NMSTRM, NMMSG, StdCtrls, TFlatEditUnit;type
  TForm1 = class(TForm)
    NMStrmServ1: TNMStrmServ;
    StatusBar1: TStatusBar;
    SaveDialog1: TSaveDialog;
    Edit1: TFlatEdit;
    Label1: TLabel;
    NMMSGServ1: TNMMSGServ;
    procedure NMStrmServ1MSG(Sender: TComponent; const sFrom: String;
      strm: TStream);
    procedure NMMSGServ1MSG(Sender: TComponent; const sFrom, sMsg: String);
    procedure NMMSGServ1ClientContact(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.NMStrmServ1MSG(Sender: TComponent; const sFrom: String;
  strm: TStream);
var
myFstream:TfileStream;
begin
if SaveDialog1.Execute then
   begin
   myFstream:=TfileStream.Create(SAveDialog1.FileName,fmcreate);
   try
   myFstream.CopyFrom(strm,4096);
   finally
   myFstream.Free;
   end;
   end;
end;procedure TForm1.NMMSGServ1MSG(Sender: TComponent; const sFrom,
  sMsg: String);
begin
edit1.Text:=smsg;
end;procedure TForm1.NMMSGServ1ClientContact(Sender: TObject);
begin
nmmsgserv1.ReportLevel:=status_basic;
nmmsgserv1.TimeOut:=9000;
statusbar1.SimpleText:='连接失败';
end;end.
#####################
发送端:
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, TFlatEditUnit, Psock, NMSTRM,
  TFlatButtonUnit, TFlatComboBoxUnit, TFlatProgressBarUnit, ExtCtrls, NMMSG;type
  TForm1 = class(TForm)
    OpenDialog1: TOpenDialog;
    NMStrm1: TNMStrm;
    Label1: TLabel;
    StatusBar1: TStatusBar;
    Buttonsend: TFlatButton;
    ButtonStop: TFlatButton;
    Edit1: TFlatEdit;
    Label3: TLabel;
    Box1: TFlatComboBox;
    Label4: TLabel;
    Edit3: TFlatEdit;
    Label5: TLabel;
    Edit4: TFlatEdit;
    Label2: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    ButtonOpen: TFlatButton;
    Timer1: TTimer;
    PBar: TFlatProgressBar;
    procedure ButtonsendClick(Sender: TObject);
    procedure NMStrm1Connect(Sender: TObject);
    procedure NMStrm1ConnectionFailed(Sender: TObject);
    procedure NMStrm1Disconnect(Sender: TObject);
    procedure NMStrm1HostResolved(Sender: TComponent);
    procedure NMStrm1InvalidHost(var Handled: Boolean);
    procedure NMStrm1MessageSent(Sender: TObject);
    procedure NMStrm1PacketSent(Sender: TObject);
    procedure NMStrm1Status(Sender: TComponent; Status: String);
    procedure ButtonStopClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ButtonOpenClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure NMMsg1MessageSent(Sender: TObject);
    procedure NMMsg1ConnectionFailed(Sender: TObject);
  private
    { Private declarations }
    
  myFstream:TfileStream;
   i:integer;
   speed:single;
   lefttime:single;  //MYLIST:string;
  public
    { Public declarations }
  end;var
  Form1: TForm1;
  tt:boolean;implementation{$R *.dfm}procedure TForm1.ButtonsendClick(Sender: TObject);
begin
//nmmsg1.Host:=box1.Text;
//nmmsg1.FromName:=edit1.Text;
//nmmsg1.PostIt(edit1.Text);
timer1.Enabled:=true;
try
nmStrm1.PostIt(Myfstream);
finally
Myfstream.free;
end;end;procedure TForm1.NMStrm1Connect(Sender: TObject);
//var a:integer;
begin
statusbar1.SimpleText:='Connected';
edit3.Text:='正在发送';
//edit4.Text:=nmstrm1.GetLocalAddress;end;
procedure TForm1.NMStrm1ConnectionFailed(Sender: TObject);
begin
ShowMessage('connection Failed');
end;procedure TForm1.NMStrm1Disconnect(Sender: TObject);
begin
if statusbar1 <> nil then
   statusbar1.SimpleText:='disconnected';
end;procedure TForm1.NMStrm1HostResolved(Sender: TComponent);
begin
statusbar1.SimpleText:='Host Resolved';
end;procedure TForm1.NMStrm1InvalidHost(var Handled: Boolean);
var
   tmpstr:string;
begin
if inputQuery('Invlid Host!','Specify a new host:',Tmpstr) then
begin
nmstrm1.Host:=Tmpstr;
handled:=true;
end;
end;procedure TForm1.NMStrm1MessageSent(Sender: TObject);
begin
showmessage('Stream Sent');
end;procedure TForm1.NMStrm1PacketSent(Sender: TObject);
begin
//statusbar1.SimpleText:=inttoStr(nmstrm1.BytesSent)+#3+'字节'+'    of'+#6+inttostr(nmstrm1.BytesTotal)+#3+'字节'+#3+'发送';
label6.Caption:=inttoStr(nmstrm1.BytesSent)+'字节';
label8.Caption:=inttostr(nmstrm1.BytesTotal)+'字节';
speed:=(nmstrm1.bytesSent div 1024) div (i+1);{speed}
edit4.Text:=FloatToStr(speed)+'KB/s';{show speed}
lefttime:=(nmstrm1.BytesTotal-nmstrm1.BytesSent) / speed;
label9.Caption:='剩余'+formatfloat('#.#',lefttime / 1024)+'秒';
//pbar.Max:=nmstrm1.BytesTotal;
//PBar.Step := 1;
//PBar.Position := 1;
//for a:=0 to nmstrm1.BytesTotal-1 do begin
//pbar.StepIt;end;procedure TForm1.NMStrm1Status(Sender: TComponent; Status: String);
begin
if statusbar1<>nil then
   statusbar1.SimpleText:=status;
end;procedure TForm1.ButtonStopClick(Sender: TObject);
begin
nmstrm1.Disconnect;
Myfstream.free;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
tt:=false;
label6.Caption:='0 字节';
timer1.Enabled:=false;
end;
procedure TForm1.ButtonOpenClick(Sender: TObject);
begin
tt:=true;
if OpenDialog1.Execute then
begin
nmstrm1.Host:=box1.Text;
box1.Items.Add(String(box1.text));
MyFstream:=TfileStream.Create(Opendialog1.filename,fmopenRead);
end;
 end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
i:=i+1;end;procedure TForm1.NMMsg1MessageSent(Sender: TObject);
begin
statusbar1.Panels[1].Text:='消息已经发送';
end;procedure TForm1.NMMsg1ConnectionFailed(Sender: TObject);
begin
statusbar1.Panels[1].Text:='连接失败';
end;end.
/*************************************/
/*1、MY TOOL:                        */
/*2、Delphi,Oracle,Sybase,C++/C      */
/*3、PROJECT:                        */
/*3、Boss                            */
/*4、为了五星的目标希望你早点结贴    */
/*************************************/下为我公司中餐定购点,大家随意随意......
四季隆小吃部:13033009679
许骏:13003059177
史记火锅快餐:3663371
清真拉面:3635476
舒乐:3661693
阿郎酒家:13956948465