DelphiSocket编程的基本概念.ppt_第1页
DelphiSocket编程的基本概念.ppt_第2页
DelphiSocket编程的基本概念.ppt_第3页
DelphiSocket编程的基本概念.ppt_第4页
DelphiSocket编程的基本概念.ppt_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

DelphiIndySocket编程的基本概念,TCP/IP,传输控制协议和互联网协议,TransmissionControlProtocolandInternetProtocol.通常所说的TCP/IP表示传输承载TCP/IP会控制传输质量,这是最大的优势:保证数据包到达的顺序保证数据包不丢包,可靠到达对方自动重传机制MTU概念:以太网默认1500Byte端口(PORT)概念,Client/Server,C/S概念,客户端/服务器请求应答模式,Request/ResponseClient=主叫,Server=被叫,Server更像一个语音呼叫中心,可以接受很多呼叫IPaddress:32bit的整数,但一般表示成可阅读的格式,如,即四个Byte分别隔开,每个Byte范围是0255,IP地址就像电话号码一个服务器可以有多个IP地址,称之为Multi-Homed,端口,Port是个整数,范围是165535端口就像分机号1024以下端口号是保留的,用作已知的公用协议,如HTTP=80,FTP=21,POP3=110,SMTP=25等等服务器要接受入站的请求,就必须监听一个端口,客户端要和服务器通信,就要提供IP地址和端口,协议,协议包含两个事情端口号,端口类型(TCP,UDP,ICMP)高级命令格式(例如HTTP,FTP,)协议可以自定义,一般公用协议是作为RFC给出的,如HTTP就是RFC2616.公用协议一般用文本方式,域名和DNS,域名是人类可阅读格式的“IP”地址对人而言,容易阅读和记忆对机器而言,可以随时更换IP而不用更改配置域名和IP没有一一对应的关系,但一个域名在某一地点的某一时刻一定只能解释为一个IPDNS为域名解释,翻译域名为IP地址,DNS服务器相当于一个地址本,socket,Socket是组合了IP,端口和协议,Socket也是一个连接两个处理进程的管道,可以是本地的,也可以是远程的。Socket就像电路交换连接的会话本地环回,字节序,主机序:不同的CPU、操作系统有不同的字节序类型,字节序是指整数在内存中保存的顺序网络序:网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。网络字节顺序采用大头,大头小头,Big-endian,大头Unix,Motorola最直观:不考虑对应关系,只要把内存地址从左到右按照由低到高的顺序写出,把值按照通常的高位到低位的顺序写出,两者对照,一个字节一个字节的填充地址低位存储值的高位,地址高位存储值的低位Little-endian,小头Windows,Intel架构最符合人的思维:低位值小就应放在地址小的地方地址低位存储值的低位,地址高位存储值的高位,大小头转换,转换函数:htons把unsignedshort类型从主机序转换到网络序htonl把unsignedlong类型从主机序转换到网络序ntohs把unsignedshort类型从网络序转换到主机序ntohl把unsignedlong类型从网络序转换到主机序请问:字符串,数组等需要转换吗?,Indy特点,阻塞模式线程模式序列化串行类似操作文件方式,阻塞和假死?,阻塞:如果没有用重叠I/O或者用线程来运行,直接调用Socket的相关API,会一直等待对方的操作完成才能继续做其他的事情非阻塞模式重叠I/O:调用的时候一样调用SocketAPI,但是给定重叠I/O标记,调用后可以继续运行,但是后续代码不能认为数据是完整可用的,重叠I/O需要对I/O操作的结果做检测线程:用独立线程去掉用SocketAPI阻塞可能导致程序假死阻塞模式优点:代码结构简单,适合简单的数据交互和后台服务,缺点:UI交互困难,有假死现象非阻塞模式优点:适合各种网络情况,用户体验较好,缺点:代码结构复杂,编程要求高,逻辑复杂,死连接检测,心跳(推荐)流量检测:从最后一次收到数据开始计时若干秒,没有收到任何数据就算失败TCPKeepAlive需要TCP/IP驱动和协议栈支持本质是底层的心跳包,procedureTdmProvider.IdServerConnect(AThread:TIdPeerThread);typeTCP_KeepAlive=recordOnOff:Cardinal;KeepAliveTime:Cardinal;KeepAliveInterval:Cardinalend;varVal:TCP_KeepAlive;Ret:Cardinal;begin/TCP/IP连接的自动超时检测心跳设置Val.OnOff:=1;Val.KeepAliveTime:=60000;/60秒钟如果还没有任何流量就断开Val.KeepAliveInterval:=10000;/每隔多久发送心跳包WSAIoctl(AThread.Connection.Socket.Binding.Handle,IOC_INorIOC_VENDORor4,Val,SizeOf(Val),nil,0,Ret,nil,nil);withAThread.Connection.Socket.BindingdoWriteLog(mtInfo,客户端连接:+PeerIP+:+IntToStr(PeerPort);end;,线程非阻塞设计,利用线程,该线程可以接受Socket数据,对Socket数据进行分析线程关联一个窗口句柄,该窗口句柄可以使主程序窗口,也可以是特定的窗口在线程Execute中,可以SendMessage消息给主程序,主程序对消息处理之后返回,也可以利用PostMessage。,消息和线程实现的主框架,ConstCM_A=WM_USER+1;CM_B=WM_USER+2;WndProc(msg:DWORD,wParam,lParam:DWORD);BegincaseMsgofCM_A:;/数据包a处理UI更新CM_B:;/数据包b处理UI更新end;End;,ThreadExecuteBeginwhile程序未终止orSocket未断开dobegin从Socket接收数据;case数据ofa:SendMessage(CM_A,Integer(数据),0);b:SendMssage(CM_B,Integer(数据),0);end;End;,网络编程注意事项,一定要检测连接状态,或者在协议上增加心跳超时检测应该是按照最后接收的时间开始计时,多久没有收到数据包才超时,而不是从开始发送数据包就进行计时服务器端需要做Idle检测,防止空连接占用资源或者被人恶

温馨提示

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

评论

0/150

提交评论