全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2168
推到 Plurk!
推到 Facebook!

如何使用NMSTRM做網路的檔案傳輸??

答題得分者是:wnhoo
hippo04
一般會員


發表:5
回覆:10
積分:3
註冊:2002-10-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-05 03:21:16 IP:203.204.xxx.xxx 未訂閱
不好意思~~~我想要使用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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-05 16:38:51 IP:61.155.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-06 03:23:16 IP:203.204.xxx.xxx 未訂閱
哇!!!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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-06 13:39:07 IP:61.155.xxx.xxx 未訂閱
1.假如說我要傳一般檔案 那把OpenPictureDialog元件改成 OpenDialog元件是不是就可以傳一般檔案??    是的。    2.我要把接收到的檔案儲存在我自己選的位置 是不是用SaveDialog這個元件就可以了??    ok    3.~~~~~~~~~~~~~~~~~~    当然可以    4.假如用SERVER,CLIENT這兩個元件~~~可以做到傳檔的功能嘛?? 是元件本身就有傳檔的事件可以使用嘛??    是的    如果你对这2个元件不太熟悉的话,请找相关文档参考。 你上面说的都可以实现。    技术总是有解的,关键是你的想法。我是这样认为的    风花雪月 e梦情缘
------
风花雪月 e梦情缘
hippo04
一般會員


發表:5
回覆:10
積分:3
註冊:2002-10-10

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-07 04:06:08 IP:203.204.xxx.xxx 未訂閱
wnhoo前輩~~~~多謝你唷!!!! 我已經把我要的功能試出來ㄌ!!! 謝謝你的指點!!!!
sky810675
一般會員


發表:5
回覆:23
積分:5
註冊:2006-07-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-07-26 11:08:05 IP:140.128.xxx.xxx 訂閱
請問NMSTRM是D幾的元件呢~?
系統時間:2024-04-28 6:41:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!