服务端:procedure TForm1.FormShow(Sender: TObject); begin IdTcpServer1.Active:=true; end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin IdTcpServer1.Active:=false; end;procedure TForm1.IdTCPServer1Execute(AContext: TIdContext); var sFile:TFileStream; sv:TIdStreamVCL; begin sFile:=TFileStream.Create('e:\fmLogin.pas',FmopenRead+fmShareDenyWrite); sv:=TIdStreamVCL.Create(sFile,true); AContext.Connection.IOHandler.WriteLn(IntToStr(sFile.Size)); AContext.Connection.IOHandler.Write(sv,sFile.Size); sFile.Free; end;
上面这段代码是Indy10的。给你这段看看,传输文件的: 服务端: 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);// .ReadBuffer(rbyte,iLen); sFile.Write(rByte,4096); inc(iFileSize,-4096); end; IdTCPClient1.ReadBuffer(rbyte,iFileSize);// .ReadBuffer(rbyte,iLen); sFile.Write(rByte,iFileSize); sFile.Free; ShowMessage('file get ok!'); end;
begin
IdTcpServer1.Active:=true;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
IdTcpServer1.Active:=false;
end;procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
sFile:TFileStream;
sv:TIdStreamVCL;
begin
sFile:=TFileStream.Create('e:\fmLogin.pas',FmopenRead+fmShareDenyWrite);
sv:=TIdStreamVCL.Create(sFile,true);
AContext.Connection.IOHandler.WriteLn(IntToStr(sFile.Size));
AContext.Connection.IOHandler.Write(sv,sFile.Size);
sFile.Free;
end;
服务端:
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);// .ReadBuffer(rbyte,iLen);
sFile.Write(rByte,4096);
inc(iFileSize,-4096);
end;
IdTCPClient1.ReadBuffer(rbyte,iFileSize);// .ReadBuffer(rbyte,iLen);
sFile.Write(rByte,iFileSize);
sFile.Free;
ShowMessage('file get ok!');
end;
IdUDPServer1.Binding.SendTo('192.168.1.8',5555,strMsg,length(strMsg));
indy 和 tcp(sockets)多好
if udp...=excute then
read
记不住了
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdUDPServer, IdBaseComponent, IdComponent, IdUDPBase,
IdUDPClient,IdSocketHandle, IdTCPConnection, IdTCPClient;type
TForm1 = class(TForm)
IdUDPServer1: TIdUDPServer;
Memo1: TMemo;
IdUDPClient1: TIdUDPClient;
procedure FormShow(Sender: TObject);
procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormShow(Sender: TObject);
begin
IdUDPServer1.Active:=true;
end;procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
strMsg:string;
begin
strMsg:='connect:PeerIp:='+ABinding.PeerIp+',PeerPort:='+IntToStr(ABinding.PeerPort);
Memo1.Lines.Add(strMsg); strMsg:='connect:Ip:='+ABinding.Ip+',Port:='+IntToStr(ABinding.Port);
Memo1.Lines.Add(strMsg); SetLength(strMsg,AData.Size); IdUDPClient1.Host:=ABinding.PeerIP;
IdUDPClient1.Port:=ABinding.PeerPort;
IdUDPClient1.Send(strMsg);
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
IdUDPServer1.Active:=false;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
IdUDPServer1.Binding.SendTo('192.168.1.8',5555,strMsg,length(strMsg));
end;end.