INDY9发送tstream】的更多相关文章

INDY9发送tstream 首先都要发送stream.Size, 这是必须的. // 服务端 AThread.Connection.WriteInteger(stream2.Size); AThread.Connection.WriteStream(stream2); // 客户端 IdTCPClient1.WriteInteger(FSendStream.Size); IdTCPClient1.WriteStream(FSendStream);…
DIOCP3-粘包处理   什么是粘包: 第一次发送  12345, 第二次发送abcde, 底层socket可能会一次性进行发送12345abcde,或者对方可能一次性进行了接收,那接收的时候,你可能想分两次接收才对,第一次接受到12345, 第二次想接收abcde,但是事与愿违,一次就接收完了,这就是粘包的问题.需要自己处理, 怎么样处理粘包: 常见的方法是在包数据的前面加长度比如我先发送一个字节代表长度5 然后再发数据包12345, 这样接收的时候,先读数据包长度,然后再获取包的数据,这样…
procedure TIdMessageClient.SendHeader(AMsg: TIdMessage); var LHeaders: TIdHeaderList; begin LHeaders := AMsg.GenerateHeader; //// -- 这里是一处bug,将导致含有中文字的header长度超过45即被截断,且影响正文中附件的解读 //// 详见:http://bbs.csdn.net/topics/50353103 //// 主题第二行不解码的原因是:TIdMessa…
1.腾讯QQ邮箱的授权码问题 因为腾讯邮箱折腾了个底朝天,其要搞什么授权码登录第三方客户端,否则会报这个错误: 'Error: 请使用授权码登录.详情请看: http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256' 按照腾讯的链接去做了设置,申请了授权码,再发送就好了. 就这个设置前所未见,客户成本挺高的,不知道哪来的勇气. 2.腾讯QQ邮箱的SSL要求 用自己的邮箱左测右测还是可以了,挺开心…
DataSnap可以直接传递和返回TStream类型的参数,这点是很方便的.但是很多人发现好像大小稍微大点就工作不正常了,就变相使用其它类型转换来转换去,这样便利性就失去了. 官方有篇博客很详细的介绍了stream的使用,英文好的可以去看下DataSnap Server Method Stream Parameters DataSnap默认的缓存大小是32k 所以如果流的大小超过这个大小就会被自动分成多个包,这就是传递大量数据的基础,如果一次性发送就可能受到内存的限制. 当传递大量数据时获取到的…
大数据是指大于32K或者64K的数据. 大数据的发送和接收通过TSTREAM对象来进行是非常方便的. 我们把大数据分割成一个个4K大小的小包,然后再依次传输. 一.大数据的发送的类语言描述: 1)创建流对象,用流对象一次性地加载完大数据 2)移动流的POSITION,一次将流的4K大小的一块内存读进一块BUF里面 3)SOCKET发送这块大小为4K的BUF 4)重复执行二.三步骤,直至发完 二.大数据的接收的类语言描述: 1)创建一个流对象 2)接收方一次接收4K大小的数据暂存一块4K大小的BU…
1)sendBuf(),sendText(),sendStream() 几乎所有的通信控件都会提供上面的3个方法.首先看看SendBuf(). function TCustomWinSocket.SendBuf(var Buf; Count: Integer): Integer;var ErrorCode: Integer;begin Lock; try Result := 0; if not FConnected then Exit; Result := send(FSocket, Buf,…
Indy9与CB自带的Indy8不同处还是挺多的.首先就是图标变漂亮了,其次很多Method都重写了.它主要是依据Delph里的函数,力求与之相通.不同点在本系列的后续章节中会一一介绍. 在写ftp代码之前,非常有必要了解下FTP网络相关知识.再次借用下Binny的博文: 在使用FTP时,如果客户端机器和FTP服务器双方之间的所有端口都是开放的,那连接不存在问题.如果客户端与服务器之间有防火墙,如果没配置好防火策略和采用合适的连接模式,会导致登录成功,但无法List列表的问题.要避免出现这样的问…
indy10的idHttpServer发送流 先看源码: procedure TIdIOHandler.Write(AStream: TStream; ASize: TIdStreamSize = 0; AWriteByteCount: Boolean = FALSE); var LBuffer: TIdBytes; LStreamPos: TIdStreamSize; LBufSize: Integer; // LBufferingStarted: Boolean; begin if ASiz…
该DEMO演示,如何在客户端与服务端之间直接传递TStream对象,让你专注于处理数据逻辑,可以忽略处理网络传输间粘包的问题. 上面由服务端向所有的客户端推送一个消息TMemoryStream对象(该对象为字符串数据). 代码解释: procedure TfrmMain.actPushMsgExecute(Sender: TObject); var lvList:TList; i: Integer; lvStream:TMemoryStream; s:AnsiString; begin lvLi…