包括各种格式的文件,有没有专门的函数可以实现文件的传输?请各位指教,急,谢谢!
解决方案 »
- BDE连接ACCESS数据(急)
- 数据库加field的时候到了10个就再也加不上了?
- 你正在使用的第三方组件有哪些,最好说出理由和优点,给DELPHIFANS推荐几个!高手进,
- 我都快疯了!!!!
- 已知某程序的句柄,如果得到它的所有子窗口和窗口中各控件的句柄?
- 在DOS下如何把“我的文档”在从C:移动到D:?里面有多层目录. XCOPY吗?急救!
- 各位老大,HELP ME.
- *********谁能解释一下软件开发中的C/S和B/S结构呀?!?!***********
- 为什么 我的源代码中的汉字突然变成乱码?
- 谁能提供delphi的三层结构的资料,一定加分!!!
- 求能对一局网地址对断开和连接
- 有谁用过writeln函数
那么,客户端如果接受到D这个字符就标识下载
var
TState = (stWait, stReceive, stSend, stSpy, stGetDrive, stGetFile ,stDel ,stShare); //定义了多种状态
len : integer;
drv : char;
f : TSearchRec;
ListItem : TListItem;
temptext, temp: string;
i, index : integer;
buf : array [0..1023] of byte; //最大传输文件大小
State : TState;
opFile: file of byte;
NumRead : integer;对于客户端:(使用clientsocket)
step 1:
if State = stWait then
if OpenDlg.Execute then
begin
assignFile(opFile,OpenDlg.filename);
Reset(opFile);
Counter := 0;
temp := OpenDlg.FileName;
i := length(temp);
repeat dec(i) until temp[i] = '\';
delete(temp,1,i);
temp := 'd' + currentDir + temp; //currentdir:为服务器端相应的地址,
ClntSocket.Socket.SendText(temp);
State := stSend;
end;
step 2:
对于服务器端:(使用serversocket)
temptext = Socket.ReceiveText;
if tempText[1] = 'd' then //上传
begin
delete(temptext,1,1);
assignFile(opFile,temptext);
rewrite(opFile);
State := stReceive;
Socket.SendText('next');
end;
step 3:
对于客户端:(使用clientsocket)
if State = stSend then //发送状态
temptext := Socket.ReceiveText;
if TempText = 'next' then
begin
BlockRead(opFile,buf,Sizeof(buf),NumRead);
ClientSocket.Socket.SendBuf(buf,numRead);
if NumRead < Sizeof(buf) then
begin
State := stWait;
CloseFile(opFile);
end
end
end;
step 4:
对于服务器端:(使用serversocket)
if State = stReceive then //假如为接受状态
begin
length := socket.ReceiveLength;
socket.ReceiveBuf(buf,Length);
BlockWrite(opFile,buf,length);
if Length < SizeOf(buf) then
begin
state := stWait;
CloseFile(opFile);
end else socket.SendText('next');
end;
end;
PS:如果不清除的话可以参考海盗远程监控木马程序:下载地址为:
1.http://software.tom.com/SoftInfoDisplay.php?id=3234
2.http://www.mycodes.net/soft/2269.htm
3.http://www.cimy.8u8.com/pirate.rar
当然这些都是没有源代码.如果你需要源代码可以写信告诉我:
[email protected].
S:准备就绪,可以接收;
C:需要上传的文件信息;
S:收到文件信息:
C:第一个包;
S:收到第一个包;创建文件,开始写数据;
C:中间的包;
S:收到中间的包;继续写数据;
C:发送最后一个包,关闭文件;
S:收到最后一个包;写数据,关闭文件。
下载文件的过程是这样的: C:请求下载文件;
S:准备就绪,可以下载;
C:需要下载的文件信息(文件名);
S:反馈文件信息(文件大小);
C:准备就绪,可以接收数据;
S:第一个包;
C:收到第一个包;创建文件,开始写数据;
S:中间的包;
C:收到中间的包;继续写数据;
S:发送最后一个包,关闭文件;
C:收到最后一个包;写数据,关闭文件;下载成功;
S:下载成功。
其中,发送中间的包和收到中间的包根据包的数量可以重复。
你说的要是有多个客户端要上传文件,文件名是不一样的,
用你说的方法也可以吗?