如何使用NMSTRM做網路的檔案傳輸?? |
答題得分者是:wnhoo
|
hippo04
一般會員 發表:5 回覆:10 積分:3 註冊:2002-10-10 發送簡訊給我 |
不好意思~~~我想要使用NMSTRM,NMSTRMSERV來做網路的檔案傳輸
我目前做到如下的程式~~可以run~~~只是不像檔案傳輸!!
希望懂得高手可以幫我解答一下!!!! unit uFile; interface uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Psock, NMSTRM, StdCtrls; type
TfrmFile = class(TForm)
Memo1: TMemo;
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
NMStrm1: TNMStrm;
NMStrmServ1: TNMStrmServ;
OpenDialog1: TOpenDialog;
Edit3: TEdit;
procedure Button1Click(Sender: TObject);
procedure NMStrm1MessageSent(Sender: TObject);
procedure NMStrmServ1MSG(Sender: TComponent; const sFrom: String;
strm: TStream);
private
{ Private declarations }
public
{ Public declarations }
end; var
frmFile: TfrmFile; implementation USES uMsn; {$R *.DFM} procedure TfrmFile.Button1Click(Sender: TObject);
var
MS : TMemoryStream;
begin
OpenDialog1.Execute;
Edit3.Text := OpenDialog1.FileName;
NMStrm1.Host := '127.0.0.1';
NMStrm1.FromName := Edit1.Text;
MS := TMemoryStream.Create;
try
StreamLn(MS, Edit2.Text);
NMStrm1.PostIt(MS);
finally
MS.Free;
end;
end; procedure TfrmFile.NMStrm1MessageSent(Sender: TObject);
begin
Memo1.Lines.Add('Stream Sent');
end; procedure TfrmFile.NMStrmServ1MSG(Sender: TComponent; const sFrom: String;
strm: TStream);
var
SS: TStringStream;
begin
SS := TStringStream.Create('');
try
SS.CopyFrom(strm, strm.size);
Memo1.Lines.Add(sFrom ' sent ' SS.DataString);
finally
SS.Free;
end;
end; end.
|
wnhoo
高階會員 發表:75 回覆:443 積分:198 註冊:2003-04-22 發送簡訊給我 |
VCL:
Panel1: TPanel;
Image1: TImage;
Button1: TButton;
Button2: TButton;
NMStrm1: TNMStrm;
NMStrmServ1: TNMStrmServ;
Edit1: TEdit;
Label1: TLabel;
Edit2: TEdit;
Label2: TLabel;
OpenPictureDialog1: TOpenPictureDialog;
StatusBar1: TStatusBar; 程序如下: unit strmdem; interface uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, NMStrm,
ExtDlgs, StdCtrls, Psock, ExtCtrls, ComCtrls; type
TForm1 = class(TForm)
Panel1: TPanel;
Image1: TImage;
Button1: TButton;
Button2: TButton;
NMStrm1: TNMStrm;
NMStrmServ1: TNMStrmServ;
Edit1: TEdit;
Label1: TLabel;
Edit2: TEdit;
Label2: TLabel;
OpenPictureDialog1: TOpenPictureDialog;
StatusBar1: TStatusBar;
procedure Button1Click(Sender: TObject);
procedure NMStrmServ1MSG(Sender: TComponent; const sFrom: String;
strm: TStream);
procedure Button2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure NMStrm1MessageSent(Sender: TObject);
procedure NMStrm1Connect(Sender: TObject);
procedure NMStrm1Disconnect(Sender: TObject);
procedure NMStrm1HostResolved(Sender: TComponent);
procedure NMStrm1Status(Sender: TComponent; Status: String);
procedure NMStrm1PacketSent(Sender: TObject);
procedure NMStrm1InvalidHost(var handled: Boolean);
procedure NMStrm1ConnectionFailed(Sender: TObject);
procedure NMStrmServ1ClientContact(Sender: TObject);
procedure NMStrmServ1Status(Sender: TComponent; Status: String);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject);
var
MyFStream: TFileStream;
begin
If OpenPictureDialog1.Execute then
Begin
NMStrm1.Host := Edit2.Text;
NMStrm1.FromName := Edit1.Text;
MyFStream := TFileStream.Create(OpenPictureDialog1.FileName, fmOpenRead);
try
NMStrm1.PostIt(MyFStream);
finally
MyFStream.Free;
end;
end;
end; procedure TForm1.NMStrmServ1MSG(Sender: TComponent; const sFrom: String;
strm: TStream);
var
MyFStream: TFileStream;
begin
If FileExists('.\tmp.bmp') then DeleteFile('.\tmp.bmp');
MyFStream := TFileStream.Create('.\tmp.bmp', fmCreate);
try
MyFStream.CopyFrom(strm, strm.size);
finally
MYFStream.Free;
end;
end; procedure TForm1.Button2Click(Sender: TObject);
begin
Image1.Picture.LoadFromFile('.\tmp.bmp');
end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
If FileExists('.\tmp.bmp') then DeleteFile('.\tmp.bmp');
end; procedure TForm1.NMStrm1MessageSent(Sender: TObject);
begin
ShowMessage('Stream Sent');
end; procedure TForm1.NMStrm1Connect(Sender: TObject);
begin
StatusBar1.SimpleText := 'Connected';
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.NMStrm1Status(Sender: TComponent; Status: String);
begin
If StatusBar1 <> nil then
StatusBar1.SimpleText := status;
end; procedure TForm1.NMStrm1PacketSent(Sender: TObject);
begin
StatusBar1.SimpleText := IntToStr(NMStrm1.BytesSent)+' of '+IntToStr(NMStrm1.BytesTotal)+' sent';
end; procedure TForm1.NMStrm1InvalidHost(var handled: Boolean);
var
TmpStr: String;
begin
If InputQuery('Invalid Host!', 'Specify a new host:', TmpStr) then
Begin
NMStrm1.Host := TmpStr;
Handled := TRUE;
End;
end; procedure TForm1.NMStrm1ConnectionFailed(Sender: TObject);
begin
ShowMessage('Connection Failed');
end; procedure TForm1.NMStrmServ1ClientContact(Sender: TObject);
begin
NMStrmServ1.ReportLevel := Status_Basic;
NMStrmServ1.TimeOut := 90000;
StatusBar1.SimpleText := 'Client connected';
end; procedure TForm1.NMStrmServ1Status(Sender: TComponent; Status: String);
begin
If StatusBar1 <> nil then
StatusBar1.SimpleText := status;
end; end. 风花雪月 e梦情缘
------
风花雪月 e梦情缘 |
hippo04
一般會員 發表:5 回覆:10 積分:3 註冊:2002-10-10 發送簡訊給我 |
哇!!!wnhoo大大真的太感謝你ㄌ~~
謝謝你把完整的code都post上來..
我已經測試過ㄌ~~~可以利用網路傳送圖檔...
要在次麻煩你ㄌ~~
我還有幾個問題想問問你~
1.假如說我要傳一般檔案
那把OpenPictureDialog元件改成
OpenDialog元件是不是就可以傳一般檔案?? 2.我要把接收到的檔案儲存在我自己選的位置
是不是用SaveDialog這個元件就可以了?? 3.只要把事件改成下面那樣就可以了嗎??
procedure TForm1.Button1Click(Sender: TObject);
var
MyFStream: TFileStream;
begin
If OpenPictureDialog1.Execute then
Begin
NMStrm1.Host := Edit2.Text;
NMStrm1.FromName := Edit1.Text;
MyFStream := TFileStream.Create(OpenDialog1.FileName, fmOpenRead);
try
NMStrm1.PostIt(MyFStream);
finally
MyFStream.Free;
end;
end;
end; procedure TForm1.NMStrmServ1MSG(Sender: TComponent; const sFrom: String;
strm: TStream);
var
MyFStream: TFileStream;
begin
If FileExists('.\tmp.bmp') then DeleteFile('.\tmp.bmp');
MyFStream := TFileStream.Create('Savedialog.FileName', fmCreate);
try
MyFStream.CopyFrom(strm, strm.size);
finally
MYFStream.Free;
end;
end;
end; 4.假如用SERVER,CLIENT這兩個元件~~~可以做到傳檔的功能嘛??
是元件本身就有傳檔的事件可以使用嘛??
|
wnhoo
高階會員 發表:75 回覆:443 積分:198 註冊:2003-04-22 發送簡訊給我 |
1.假如說我要傳一般檔案
那把OpenPictureDialog元件改成
OpenDialog元件是不是就可以傳一般檔案?? 是的。 2.我要把接收到的檔案儲存在我自己選的位置
是不是用SaveDialog這個元件就可以了?? ok 3.~~~~~~~~~~~~~~~~~~ 当然可以 4.假如用SERVER,CLIENT這兩個元件~~~可以做到傳檔的功能嘛??
是元件本身就有傳檔的事件可以使用嘛?? 是的 如果你对这2个元件不太熟悉的话,请找相关文档参考。
你上面说的都可以实现。 技术总是有解的,关键是你的想法。我是这样认为的 风花雪月 e梦情缘
------
风花雪月 e梦情缘 |
hippo04
一般會員 發表:5 回覆:10 積分:3 註冊:2002-10-10 發送簡訊給我 |
|
sky810675
一般會員 發表:5 回覆:23 積分:5 註冊:2006-07-21 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |