Indy10中如何用IdTCPServer传送文件?哪位大侠帮帮忙,谢了!
解决方案 »
- 怎么样实现将一个.ini 文件添加到.exe 文件的末尾?
- Cheatengine里的4 bytes转换为text应该怎样写?
- 问一个串口通计时的问题,麻烦了
- 海康威视SDK调用获取DVR参数问题
- 求助:如何实现控件里插入型输入方式?
- 高分求速达控件,要能技术D7以上的版本的。
- 怎样看到另一台机器上的文件?
- 怎麼把查詢結果導出到制定的Excel文檔中???最好有代碼
- 这句INSERT语句也会错?
- 请问怎样用[ 简便 ]AdoQuery一次取得一条记录?我现在只能用QueryField.Fields[i].Text取得一条记录中一个字段的值
- 写动态类的事件
- Tchart组件如何设置坐标轴为对数坐标???
http://www.2ccc.com/article.asp?articleid=1681给你一段传输文件的代码,调试过,传输文件没问题。用Stream,文件很大的时候,传输会有问题。
服务端:
var
iFileHandle:integer;
iFileLen,cnt:integer;
buf:array[0..4096] of byte;
begin
iFileHandle:=FileOpen('E:\setup\qq2004sp1.exe',fmOpenRead);
iFileLen:=FileSeek(iFileHandle,0,2);
FileSeek(iFileHandle,0,0);
AThread.Connection.WriteInteger(iFileLen);
while true do
begin
cnt:=FileRead(iFileHandle,buf,4096);
AThread.Connection.WriteBuffer(buf,cnt);
if cnt<4096 then
break;
end;
FileClose(iFileHandle);
end;
客户端:
procedure TForm1.Button1Click(Sender: TObject);
var
rbyte:array[0..4096] of byte;
sFile:TFileStream;
iFileSize:integer;
begin
try
IdTcpClient1.Connect(5000);
except
exit;
end;
iFileSize:=IdTCPClient1.ReadInteger;
sFile:=TFileStream.Create('e:\bb.tmp',fmCreate);
While iFileSize>4096 do
begin
IdTCPClient1.ReadBuffer(rbyte,4096);
sFile.Write(rByte,4096);
inc(iFileSize,-4096);
end;
IdTCPClient1.ReadBuffer(rbyte,iFileSize);
sFile.Write(rByte,iFileSize);
sFile.Free;
ShowMessage('file get ok!');
end;
先在发送端和接收端定义同一个结构
TFileBlock = record
FileName:string;
Size:integer;
Buf:array[0..4096] of byte;
end;
用TFileStream打开文件
循环读出4096字节放到桔构里再发送
直到应发送字节等0