如何在网络上传输文件?
我知道可以利用Socket将文件分块实现,请问谁有具体资料??
能否用FTP呢,Delphi怎么实现呢?
另:CSDN的搜索功能简直没法用!!基本上请求发出去就没响应了。
我知道可以利用Socket将文件分块实现,请问谁有具体资料??
能否用FTP呢,Delphi怎么实现呢?
另:CSDN的搜索功能简直没法用!!基本上请求发出去就没响应了。
解决方案 »
- delphi7 如何实现txt文件转换成excel文件~
- delphi 支持开发sql server ce同步功能吗?
- 如何遍历查找字符串?
- 能否将CXgrid中的单元格内的文字区分不同的颜色
- fastreport 做主從報表時為什麼當從報表沒有記錄時報表不會顯示這條記錄,該怎麼解決?
- 各位DELPHI高手们指点一下小弟
- 医院感染监控程序出售中!
- 现在用的控件都是D版的,以后怎么注册软件啊?
- 紧急求救:quickrep中列数太多,preview只能看到A4页面宽度的内容,即使更改ORIENTATION为LANDSCAPE也不行。注:我的计算机上没有安装打印机。
- 紧急!为什么装不上ADOExpress Update Pack 2?
- Panel上放Image,如何让Image后面的字能够被看到?
- 关于数据集合的LOOKUP
要的话发个邮件给我
上面线程和非线程的都有.需要代码给我发短消息.
var
localfname:string;
begin
datamodule2.NMFTP1.Connect;
try datamodule2.NMFTP1.ChangeDir(remote_dir);
begin
if nod='认证平台' then
localfname:=remote_file
else
localfname:=mycaption;
datamodule2.NMFTP1.Download(remote_file,FRootPath+remote_file);
end
except
On E:Exception do begin
showmessage('无法完成!原文件可能不存在!');
end;
end;
datamodule2.NMFTP1.Disconnect;
end;procedure ex_upload(remote_dir:string;atable:tcustomadodataset;fieldname:string);
var
remotefname,localfname:string;
label lab;
begin
begin
datamodule2.NMFTP1.Connect;
try if not DirectoryExists('ftp://'+trim(sysshezhi.edtAddress.text)+'/'+remote_dir) then
datamodule2.nmftp1.MakeDirectory(remote_dir);
except
On E:Exception do begin
end;end;
datamodule2.NMFTP1.ChangeDir(remote_dir);
lab: if datamodule2.OpenDialog1.Execute then
begin
temp_dir:='ftp://'+trim(sysshezhi.edtAddress.Text)+'/'+remote_dir;
localfname:=datamodule2.OpenDialog1.FileName;
remotefname:=extractfilename(localfname);
remotefnam:=remotefname;
if remotefname='' then
begin
showmessage('没有选中文件!请重新选择!');
goto lab;
end
else
begin
if findfile(atable,remotefnam,fieldname) then
begin
if MessageDlg('此文件已存在,要覆盖吗?',mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
bool:=true;
ins:=false;
datamodule2.NMFTP1.upload(localfname,remotefname);
end
else
begin
bool:=false;
messagebox(0,'请改名后重试!','提示!',0);
end;
end;
if not findfile(atable,remotefnam,fieldname) then
begin
bool:=true;ins:=true;
datamodule2.NMFTP1.upload(localfname,remotefname);
end;
end;
end;
end;
datamodule2.NMFTP1.Disconnect;
end;
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ScktComp, StdCtrls;type
TCon = record
FileName : String;
TotalSize : Integer;
Status : Integer;
end; PCON = ^TCON; TForm1 = class(TForm)
SS: TServerSocket;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure SSClientConnect(Sender: TObject; Socket: TCustomWinSocket);
procedure SSClientRead(Sender: TObject; Socket: TCustomWinSocket);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementationuses Unit2;{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
begin
SS.Port := 9000;
SS.Active := True;
end;procedure TForm1.SSClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
var c : pcon;
begin c :=new(pcon);
c.FileName := '';
c.TotalSize := 0 ;
c.Status := 0;
Socket.Data := c;
Socket.SendText('已经连接,请输入UPLOAD FILENAME SIZE'#13#10);end;procedure TForm1.SSClientRead(Sender: TObject; Socket: TCustomWinSocket);
var C : PCON;
cmd:String;
Buffer : pointer;
nRetr : integer;
fs : TFileStream;
const bufferSize = 1024 ;begin
C:= Socket.Data ;
case c.Status of
0 :
begin
cmd := trim(Socket.ReceiveText) ; if Pos('UPLOAD ',uppercase(cmd)) > 0 then
begin
c.FileName := trim(Copy(cmd,Pos(' ',cmd)+1,Length(cmd)));
c.TotalSize := StrToInt(Copy(c.FileName,Pos(' ',c.FileName)+1,Length(c.FileName)));
c.FileName := trim(Copy(c.FileName,1,Pos(' ',c.FileName)));
c.Status := 1;
Socket.Data := C;
Socket.SendText('you can send File !'#13#10);
end;
end;
1 : begin
GetMem(Buffer,BufferSize);
nRetr := Socket.ReceiveBuf(Buffer^,BufferSize); if not FIleExists('c:\'+c.FileName) then
begin
fs :=TFileStream.Create('c:\'+c.FileName,fmCreate or fmShareDenyNone);
fs.Seek(0,soFromBeginning);
end
else
begin
fs :=TFileStream.Create('c:\'+c.FileName,fmOpenWrite or fmShareDenyNone);
fs.Seek(0,soFromEnd);
end; fs.WriteBuffer(Buffer^,nRetr); fs.Destroy;
FreeMem(Buffer);
end;
end;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
Form2.Show;
end;end.
--------------------------------------------------------------------------------
来自:唐晓锋 时间:99-11-30 01:17:19 ID:162654
unit Unit2;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ScktComp;type
TForm2 = class(TForm)
CS: TClientSocket;
OpenDialog1: TOpenDialog;
Memo1: TMemo;
Button1: TButton;
Edit1: TEdit;
Button2: TButton;
SendCommand: TButton;
Label1: TLabel;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure SendCommandClick(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure CSRead(Sender: TObject; Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form2: TForm2;implementation{$R *.DFM}
function GetFileSize(const FileName: string):integer;
var f : TFileStream;
begin
f := TFileStream.Create(FileName,fmOpenRead or fmShareDenyNone);
Result :=f.Size;
F.Free;
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
with OpenDialog1 do
begin
Execute;
if FileName <> '' then
begin
Edit1.Text := 'UPLOAD '+ ExtractFileName(FileName) +' '+Inttostr(GetFileSize(FileName));
Label1.Caption := FileName;
cs.Socket.SendText(edit1.Text);
end;
end;
end;procedure TForm2.Button2Click(Sender: TObject);
begin
CS.Active := True;end;procedure TForm2.SendCommandClick(Sender: TObject);
var fs : TFileStream;
Buf : pointer;begin
//CS.Socket.SendText(Edit1.Text+#13#10);
//Memo1.Lines.Add();
fs := TFileStream.Create(Label1.Caption ,fmOpenRead or fmShareDenyNone); GetMem(Buf,fs.Size);
fs.Seek(0,soFromBeginning); fs.ReadBuffer(Buf^,fs.Size); memo1.Lines.Add('has send : '+inttostr(Cs.Socket.SendBuf(Buf^,fs.Size)));end;procedure TForm2.Button3Click(Sender: TObject);
begin
cs.Close;
end;procedure TForm2.CSRead(Sender: TObject; Socket: TCustomWinSocket);
begin Memo1.Lines.add(socket.receiveText);end;end.
我需要的是一个点到点的文件传输
使用Socket需要把文件分成几个部分传输
我听说Delphi6中有NMStrm和NMStrmServ可以实现
可在Delphi7中这两个控件不见了
被Indy代替了
所以现在的问题是:
Indy中有与NMStrm和NMStrmServ相对应的控件吗?多谢各位了
分不够我可以再加
现在谁还用nm系列哪。
delphi都把它们给抛弃了。
用Winsocket又有一定难度.
所以...........
在接收端做个ftp服务器接收,在客房端随便做个ftp上传就可以了。
这是什么意思?呵呵.... 我用indy做的ftp上传及接收,在最原始的win98下(什么都没装)都可以用。连服务器的概念都不存在!
能发到我信箱里吗
[email protected]
多谢
http://groups.yahoo.com/group/Indy-Demos/
谢谢大家
foxmx(夜之狐)请到
http://expert.csdn.net/Expert/topic/2155/2155802.xml?temp=.9107324
领分
谢谢