delphi indy的UDP传输的演示源码_第1页
delphi indy的UDP传输的演示源码_第2页
delphi indy的UDP传输的演示源码_第3页
delphi indy的UDP传输的演示源码_第4页
delphi indy的UDP传输的演示源码_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、用 Delphi 编写点对点传文件程序delphi indy 的 UDP 传输的演示源码2009-02-27 17:05客户端:varcmd: string;ASize, TotalSize: Int64;AFileStream: TFileStream;beginIdTCPClient1.Host := Edit1.Text; /连接主机IdTCPClient1.Port := StrToIntDef(Edit2.Text, 9925; /端口 IdTCPClient1.Connect; /连接tryIdTCPClient1.WriteLn('BEGIN' /提示服务器开始接

2、收cmd := IdTCPClient1.ReadLn;/以 “|” 符号分离文件名SaveDialog1.FileName := Copy(cmd, Pos('|', cmd + 1, Length(cmd;if not SaveDialog1.Execute thenbeginIdTCPClient1.WriteLn('CANCEL' /告诉服务器取消 IdTCPClient1.Disconnect; /断开连接exit;end;TotalSize := StrToInt(Copy(cmd, 0, Pos('|', cmd - 1; /分离文

3、件大小/建立文件流准备接收AFileStream := TFileStream.Create(SaveDialog1.FileName, fmCreate;try /循环开始接受repeatIdTCPClient1.WriteLn(IntToStr(AFileStream.Size;/发送当前传输的位置ASize := Min(TotalSize - AFileStream.Size, IdTCPClient1.RecvBufferSize; /选择剩余大小和缓冲区大小小的一个作为传输的大小 IdTCPClient1.ReadStream(AFileStream, ASize; /接收流 St

4、atusBar1.SimpleText := Format('当前传输位置 %d/大小 %d', AFileStream.Size, TotalSize;Application.ProcessMessages;until AFileStream.Size = TotalSize; /大小一致了表示结束finallyAFileStream.Free; /释放文件流end;IdTCPClient1.WriteLn('END' /提示服务器传输完成StatusBar1.SimpleText := '传输完成 .'exceptStatusBar1.Sim

5、pleText := '连接服务器失败或者对方已经中断传输! 'end;IdTCPClient1.Disconne-服务器:procedure Tfrm_Server.IdTCPServer1Execute(AThread: TIdPeerThread;varcmd: string; /接收到客户端的字符串信息ASize: Integer; /需要传输的流大小beginwith AThread.Connection do /已经连街上的一个进程begincmd := UpperCase(ReadLn; /客户端发送的命令字符串if cmd = 'BEGIN' t

6、hen /开始传输begin/告诉远程传输文件的大小和文件名WriteLn(Format('%d|%s', AFileStream.Size, ExtractFileName(Edit1.Text; StatusBar1.SimpleText := '准备传输 .'Exit;end;if cmd = 'END' thenbegin /传输完成Button3.Click;StatusBar1.SimpleText := '传输完成 .'Exit;end;if cmd = 'CANCEL' thenbegin /传输取

7、消StatusBar1.SimpleText := '传输取消 .'/保持传输状态Exit;end;/按照指定位置传输文件AFileStream.Seek(StrToInT(cmd, soFromBeginning; /转到文件流传输的位置ASize := Min(AFileStream.Size - AFileStream.Position, RecvBufferSize;/计算需要发送的大小, Min(函数在 Math 单元OpenWriteBuffer; /准备发送缓冲WriteStream(AFileStream, false, false, ASize;/注意这个函数

8、的参数。CloseWriteBuffer; /结束发送缓冲StatusBar1.SimpleText := Format('当前传输位置 %s/大小 %d', cmd, AFileStream.Size;ProgressBar1.Position := ProgressBar1.Position + ASize;end;end;-UP-Simple UDP client demoVerified;Indy 9:D7: 25th Oct 2004 Andy Neillansunit UDPClientMain;interfaceusesWindows, Messages, Gra

9、phics, Controls, Forms, Dialogs, IdWinsock2, stdctrls, SysUtils, Classes, IdBaseComponent, IdAntiFreezeBase, IdAntiFreeze, IdComponent, IdUDPBase, IdUDPClient, IdStack;typeTUDPMainForm = class(TFormSourceGroupBox: TGroupBox;HostNameLabel: TLabel;HostAddressLabel: TLabel;HostName: TLabel;HostAddress:

10、 TLabel;UDPAntiFreeze: TIdAntiFreeze;PortLabel: TLabel;Port: TLabel;DestinationLabel: TLabel;DestinationAddress: TLabel;BufferSizeLabel: TLabel;BufferSize: TLabel;UDPMemo: TMemo;SendButton: TButton;UDPClient: TIdUDPClient;procedure FormCreate(Sender: TObject;procedure SendButtonClick(Sender: TObject

11、;private Private declarations public Public declarations end;varUDPMainForm: TUDPMainForm;implementationconstHOSTNAMELENGTH = 80;RECIEVETIMEOUT = 5000; / milliseconds$R *.DFMprocedure TUDPMainForm.FormCreate(Sender: TObject;beginRandomize; / remove if you want reproducible results. HostName.Caption

12、:= UDPClient.LocalName; HostAddress.Caption := GStack.LocalAddress;Port.Caption := IntToStr(UDPClient.Port; DestinationAddress.Caption := UDPClient.Host; BufferSize.Caption := IntToStr(UDPClient.BufferSize; UDPClient.ReceiveTimeout := RECIEVETIMEOUT;end;procedure TUDPMainForm.SendButtonClick(Sender:

13、 TObject; varMessageID: Integer;ThisMessage: String;ReceivedString: String;beginMessageID := Random(MAXINT;ReceivedString := UDPClient.ReceiveString(;if ReceivedString = '' thenelseend;end.-Notes:Simple UDP server demoVerified:Indy 9:D7: 25th Oct 2004 Andy Neillansunit UDPServerMain;interfac

14、eusesWindows, Messages, Graphics, Controls, Forms, Dialogs, IdWinsock2, stdctrls,SysUtils, Classes, IdBaseComponent, IdAntiFreezeBase, IdAntiFreeze,IdComponent, IdUDPBase, IdUDPClient, IdStack, IdUDPServer, IdSocketHandle;typeTUDPMainForm = class(TFormSourceGroupBox: TGroupBox;HostNameLabel: TLabel;HostAddressLabel: TLabel;HostName: TLabel;HostAddress: TLabel;UDPServer: TIdUDPServer;UDPAntiFreeze: TIdAntiFreeze;PortLabel: TLabel;Port: TLabel;BufferSizeLabel

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论