Delphi实例-IdTCPServer和IdTCPClient的使用(支持文件发送)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Delphi实例-IdTCPServer和IdTCPClient的使用(支持文件发送),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6358字,纯文字阅读大概需要10分钟。
内容图文
![Delphi实例-IdTCPServer和IdTCPClient的使用(支持文件发送)](/upload/InfoBanner/zyjiaocheng/1151/04eddc742fcc46869bca6c9e6d2a6b6b.jpg)
相关资料:
http://blog.csdn.net/earbao/article/details/46514313
结果注意:
1.Use IdContext、IdGlobal 这两个单元
2.不能使用string类型,在分存分配时会出错的。
3.手机中不支持string[20]。
实例代码:
1
unit
Unit1;
2
3
interface
4
5
uses
6
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
7
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.ScrollBox,
8
FMX.Memo, FMX.Controls.Presentation, FMX.StdCtrls, IdTCPConnection,
9
IdTCPClient, IdBaseComponent, IdComponent, IdCustomTCPServer, IdTCPServer,
10
IdContext, IdIOHandler, Data.DBByteBuffer, IdGlobal, FMX.Edit, FMX.Objects;
11
12
//
常量区
13
const
14 ServerPort = 1239;
15 16//基础数据类型 17 18//方案一:手机不支持这种的 19//type 20// TUser = record 21// UserName,UserID:String[20]; 22// IP:String[16]; 23// Port:Integer; 24// Msg:String[100]; 25// Arr:Array[1..9] of String[20]; 26// flag:Boolean; 27// Cmd:String[20]; 28//end; 29 30//方案二:手机PC都支持 31type 32 TUser = record 33 UserName, UserID:String;
34 IP: String;
35 Port: Integer;
36 Msg: String;
37 Arr: Array[1..9] of String;
38 flag: Boolean;
39 Cmd: String;
40end;
41 42 43//方案三:记录指针 44 TSMSHead = packedrecord 45 SequenceID: Integer;
46 CommandID: Integer;
47 TotalLength: Integer;
48end;
49 PSMSHead = ^TSMSHead;
50 51 TSMSConnect = packedrecord 52 Head: TSMSHead;
53 UID: array[0..19] of char;
54 PWD: array[0..19] of char;
55 Version: Byte;
56end;
57 PSMSConnect = ^TSMSConnect;
58 59 60 61type 62 TForm1 = class(TForm)
63 IdTCPServer1: TIdTCPServer;
64 IdTCPClient1: TIdTCPClient;
65 Button1: TButton;
66 Button2: TButton;
67 Button3: TButton;
68 Button4: TButton;
69 Memo1: TMemo;
70 Label1: TLabel;
71 Button5: TButton;
72 Button6: TButton;
73 Edit1: TEdit;
74 Label3: TLabel;
75 Image1: TImage;
76procedure Button3Click(Sender: TObject);
77procedure IdTCPServer1Connect(AContext: TIdContext);
78procedure Button4Click(Sender: TObject);
79procedure Button5Click(Sender: TObject);
80procedure Button6Click(Sender: TObject);
81procedure IdTCPServer1Execute(AContext: TIdContext);
82procedure Button1Click(Sender: TObject);
83procedure Button2Click(Sender: TObject);
84private 85{ Private declarations } 86public 87{ Public declarations } 88 FileSize: Int64;//发送文件时用到,保存文件大小。 89end;
90 91var 92 Form1: TForm1;
93 94implementation 95 96{$R *.fmx} 97{$R *.SmXhdpiPh.fmx ANDROID} 98{$R *.NmXhdpiPh.fmx ANDROID} 99100//连接服务器101procedure TForm1.Button3Click(Sender: TObject);
102begin103 IdTCPClient1.Host:= Edit1.Text; //服务器的IP104 IdTCPClient1.Port:= ServerPort; //服务器的端口105 IdTCPClient1.Connect; //连接服务器106end;
107108//连接提示109procedure TForm1.IdTCPServer1Connect(AContext: TIdContext);
110begin111 Memo1.Lines.Add(‘有用户连接‘);
112 Memo1.Lines.Add(‘‘);
113end;
114115//记录类型(TIdBytes)116procedure TForm1.Button4Click(Sender: TObject);
117var118 User: TUser;
119 sby: TIdBytes;
120begin121with user do122begin123 UserName := ‘Wyatt‘;
124 UserID := ‘7895421‘;
125 Ip:= ‘192.168.1.188‘;
126 Port := 9999;
127 Msg := ‘ABC‘;
128 cmd := ‘Quit‘;
129end;
130 sBy := RawTOBytes(user, sizeof(user));
131 IdTCPClient1.IOHandler.Write(sBy);
132end;
133134//记录类型(TMemoryStream)135procedure TForm1.Button5Click(Sender: TObject);
136var137 User: TUser;
138 Mon: TMemoryStream;
139begin140with user do141begin142 UserName := ‘Wyatt‘;
143 UserID := ‘85171659‘;
144 Ip := ‘192.168.1.188‘;
145 Port := 9999;
146 Msg := ‘4567‘;
147 cmd := ‘Quit‘;
148end;
149 Mon := TMemoryStream.Create;
150try151 Mon.WriteBuffer(user, sizeof(user));
152 IdTCPClient1.IOHandler.Write(Mon);
153finally154 Mon.Free;
155end;
156end;
157158//记录指针(TIdBytes)159procedure TForm1.Button1Click(Sender: TObject);
160var161 pkt: TSMSConnect;
162 buf: TIdBytes;
163begin164// 填写pkt165 pkt.Head.SequenceID := 1000;
166 pkt.Head.CommandID := 119;
167 StrLCopy(pkt.UID, ‘I love you 你好‘, SizeOf(pkt.UID));
168// ...169// 准备缓冲区数据170 SetLength(buf, SizeOf(TSMSConnect));
171 Move(pkt, buf[0], SizeOf(TSMSConnect));
172 IdTCPClient1.Socket.Write(buf);
173end;
174175//发送文件(TFileStream)176procedure TForm1.Button2Click(Sender: TObject);
177var178 oTmpStream: TFileStream;
179begin180 Try
181 oTmpStream := TFileStream.Create(‘E:\123.jpg‘, fmOpenRead);
182 oTmpStream.Position := 0;
183 FileSize := oTmpStream.Size;
184 IdTCPClient1.IOHandler.Write(oTmpStream);
185 oTmpStream.Free;
186except187//
188end;
189end;
190191//Byte方法(未实现)192procedure TForm1.Button6Click(Sender: TObject);
193const194 data: array[0..32] of Byte = (23, 32, 3, 1, 23, 25, 0, 8, 0, 86, 49, 46, 48, 46, 48, 46, 48, 4, 0, 57, 48, 50, 53, 5, 0, 77, 65, 67, 80, 67, 1, 12, 15);
195var196 ReqBuf, RespBuf: TIdBytes;
197 I: Integer;
198begin199 SetLength(ReqBuf, 33);
200for I := 0to Length(ReqBuf) - 1do201begin202 ReqBuf[I] := data[I];
203end;
204try205 IdTCPClient1.IOHandler.Write(ReqBuf);
206except207 on e: Exception do208begin209 ShowMessage(‘发送‘ + e.Message);
210 Exit;
211end;
212end;
213end;
214215procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
216//接收文件流217var218 omStream: TMemoryStream;
219begin220 omStream := TMemoryStream.Create;
221 AContext.Connection.IOHandler.ReadStream(omStream, FileSize);
222 omStream.SaveToFile(‘E:\01.jpg‘);
223 omStream.Free;
224225//接收记录类型(TIdBytes)226//var227// user: TUser;228// buf: TidBytes;229//begin230// Acontext.Connection.IOHandler.ReadBytes(buf, sizeof(user));231// BytesToRaw(buf, user, sizeof(user));232// with user, memo1.Lines do233// begin234// Add(userName);235// add(userID);236// add(ip);237// add(inttostr(port));238// add(Msg);239// add(cmd);240// add(‘‘);241// end;242243//接收记录类型(TMemoryStream)244//var245// user: TUser;246// Mon: TMemoryStream;247//begin248// Mon := TMemoryStream.Create;249// try250// AContext.Connection.IOHandler.ReadStream(Mon);251// Mon.ReadBuffer(user, Sizeof(user)); //Indy 10必须将记录类型转换为TidBytes类型才能发送252// with user, memo1.Lines do253// begin254// Add(userName);255// add(userID);256// add(ip);257// add(inttostr(port));258// add(Msg);259// add(cmd);260// add(‘‘);261// end;262// finally263// Mon.Free;264// end;265266//接收记录指针(TIdBytes)267//var268// pkt: PSMSConnect;269// buf: TIdBytes;270//begin271// SetLength(buf, SizeOf(TSMSConnect));272// AContext.Connection.Socket.ReadBytes(buf, SizeOf(TSMSConnect), False);273// pkt := PSMSConnect(@buf[0]);274// Assert(pkt.Head.SequenceID = 1000);275// Memo1.Lines.Add(pkt.UID);276// Memo1.Lines.Add(‘‘);277end;
278279end.
原文:http://www.cnblogs.com/FKdelphi/p/5054853.html
内容总结
以上是互联网集市为您收集整理的Delphi实例-IdTCPServer和IdTCPClient的使用(支持文件发送)全部内容,希望文章能够帮你解决Delphi实例-IdTCPServer和IdTCPClient的使用(支持文件发送)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。