转:
接受端:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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
接受端:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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
2,确定你要传送文件的协议
3,如果你采用的是udp,他就没有确认连接等功能,所以你就要考虑自己编写协议方面的问题了。