版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 深度解析(2026)GBT 25668.2-2010镗铣类模块式工具系统 第2部分:TMG21工具系统的型式和尺寸
- 2025重庆大学高端装备机械传动全国重点实验室科研团队劳务派遣技术人员招聘笔试考试参考试题及答案解析
- 2026河北沧州医学高等专科学校高层次人才选聘50人模拟笔试试题及答案解析
- 2025年度12月浙江嘉兴市海宁市交通投资控股集团有限公司下属公司招聘4人模拟笔试试题及答案解析
- 2025河南周口临港开发区事业单位招才引智4人参考笔试题库附答案解析
- 2025重庆大足区教育事业单位面向应届生考核招聘42人参考考试题库及答案解析
- 2026湖南长沙市华益中学春季教师招聘备考考试试题及答案解析
- 2025广西来宾市兴宾区机关后勤服务中心招聘2人参考考试题库及答案解析
- 2025四川长虹新材料科技有限公司招聘产品工程师岗位1人参考考试题库及答案解析
- 2025广西壮族自治区文化和旅游厅幼儿园保育员招聘1人参考考试试题及答案解析
- 中华人民共和国简史学习通超星课后章节答案期末考试题库2023年
- 成都空港产业兴城投资发展有限公司空中客车飞机全生命周期服务项目环境影响报告
- 回族上坟怎么念
- 绳结的各种打法
- 大众滑雪智慧树知到答案章节测试2023年沈阳体育学院
- 建筑施工事故案例PPT
- 核对稿300单元分析响应
- GB/T 26480-2011阀门的检验和试验
- GB 32166.1-2016个体防护装备眼面部防护职业眼面部防护具第1部分:要求
- 第21课《女娲造人》课件(共22张PPT) 部编版语文七年级上册
- 2022-2023学年人教版高中地理选择性必修一课件:5.1 自然地理环境的整体性 (33张)
评论
0/150
提交评论