随笔分类 - 通讯协议和数据序列
通讯协议和数据序列
摘要:支付宝签名验证实现-Delphi版
阅读全文
摘要:JsonDataObjects序列和还原
阅读全文
摘要:unit uPackage;// 应用协议// cxg 2016-9-23// 包=包头+包体 interface uses SysUtils, Classes, PeachCtrl.Net.IocpTcpServer, System.Generics.Collections, Winapi.Win
阅读全文
摘要:IOCP数据中间件 每包最大8K(8192字节),超过8187字节的数据要分包传输 首包有5个字节的包头:4字节数据长度(告诉对方,此次总共将传输几字节数据) + 1字节命令字(告诉对方,此次请求的何种命令) 命令分类1)请求查询数据,应答查询数据2)请求提交数据,应答提交数据3)请求上传文件,应答
阅读全文
摘要:一个数据包最大长度是8K超过8188字节的数据需要分成多个数据包来传输第一个数据包的前4字节用于存放将要传输数据的长度,后面8188字节才是数据(4+8188=8192字节)第二个数据包8192字节全部是数据计算数据需要几个包来传输:(数据长度+4字节) div 8192计算最末数据包的数据长度:(
阅读全文
摘要:procedure SendStream(const AStream: TStream);var Buffer: array[0..4095] of Byte; // 每包最大4K StartPos, AmountInBuf, AmountSent: Integer;begin if AStream
阅读全文
摘要:unit U_FrmServer; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Winsock, StdCtrls; const WM_WINSOCK_ASYNC_M
阅读全文
摘要:Server端: unit U_FrmServer; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Winsock2, StdCtrls; const WM_WINSO
阅读全文
摘要:DELPHI7的STRING默认是ANSI编码,加载UNICODE编码格式的TXT显示为乱码,解决方法如下:procedure TForm1.Button1Click(Sender: TObject);var F:TFileStream; S:WideString; I:Integer; F...
阅读全文
摘要:使用IDFTP连不上FTP服务端。原来是IDFTP有2种模式:主动模式和被动模式。IDFTP默认是使用主动模式,如果FTP服务端设置使用被动模式,使用IDFTP连不上FTP服务端的。解决方法:设置IDFTP为被动模式,IdFTP1.Passive :=True; // 被动模式
阅读全文
摘要:unit HUtil32;//提供大量的辅助函数{$WARNINGS OFF}interfaceuses Classes, SysUtils, WinTypes, WinProcs, Graphics, Messages, Dialogs;type Str4096 = array [0..4096]...
阅读全文
摘要:使用方法:将缓存中数据转换成字符串并且进行了加密,然后将加密后的字符串通过SOCKET通信传输,接收方收到后,将字符串解密并且还原出数据。可单独用于结构体的序列也可用于结构体序列+有规则字符串的序列,看似简单,其实万能而通用,有许多游戏都是这么传数据的,无非是改一改加密和解密的算法罢了。unit E...
阅读全文
摘要:最精简的IOCP封装,DELPHI XE8直接编译通过。Winsock2.pas即使用DELPHI自带的,相信XE7也能编译,或者XE6,XE5也能。单说Winsock2.pas,我见过无数种版本的了,各版本WINSOCK 2的API的方法的参数的数据类型居然都有出入,使用不同人封装的Winsock...
阅读全文
摘要:WINDOWS 2000以后的操作系统才支持IOCP。WINSOCK2.0才支持IOCP。 首先要有一个WINSOCK2.PAS的WINSOCK2.0接口调用声明单元。 WINSOCK的版本号: WINSOCK_VERSION = $0202; 动态库:ws2_32 = 'ws2_32.dll';
阅读全文
摘要:网上有人说异步选择模式中不能使用OVERLAPPED(IO重叠)。这是一种误解。异步选择模式中可以使用完成端口作为它的消息队列,从而使用WINDOWS内核的OVERLAPPED。但异步选择模式的SEND,RECV确实还是阻塞的,这点就达不到IOCP的异步效果。
阅读全文
摘要:TCP长连接会有粘包的问题存在。为什么?问度娘。处理粘包的唯一方法就是制定应用层的数据通讯协议,通过协议来规范现有接收的数据是否满足消息数据的需要。在应用中处理粘包的基础方法主要有两种分别是以4节字描述消息大小或以结束符。在此略过N多代码。
阅读全文
摘要:大数据是指大于32K或者64K的数据。大数据的发送和接收通过TSTREAM对象来进行是非常方便的。我们把大数据分割成一个个4K大小的小包,然后再依次传输。一、大数据的发送的类语言描述:1)创建流对象,用流对象一次性地加载完大数据2)移动流的POSITION,一次将流的4K大小的一块内存读进一块BUF...
阅读全文
摘要:1)sendBuf(),sendText(),sendStream()几乎所有的通信控件都会提供上面的3个方法。首先看看SendBuf()。function TCustomWinSocket.SendBuf(var Buf; Count: Integer): Integer;var ErrorCo...
阅读全文