期货量化交易客户端开源教学第八节——TCP通信服务类

  private
    FReciveStr: AnsiString;     {接收到的数据}
    IsConErr: Boolean;      {网络连接是否失败}
    FSocket_LB: Integer;   {TCP连接类别,0为交易,1为行情,2为查询}
    FRetryCount: Integer; {网络连接重试次数}
    FLoginErrEvent: TLoginErrEvent;
    {心跳包定时器}
    procedure OnTimer_heatpack(Sender: TObject);
    {接收客户端发送的数据}
    procedure FTCP_serverClientRead(ReciveStr: AnsiString);
    procedure RunTCP_Conn_Event(connState: Boolean);
  public
    FBuffer_Port:array of Integer;
    Fbusiness_data: Tbuffer1024; {业务处理数据}
    Park_lenght: integer;    {收到的缓存包大小}
    buf_read: Tbuffer1024;  {读取到的字节}
    Timer_heatpack: TTimer; {心跳包定时器}
    FCMD_data: TMemoryStream;{指令数据}
    constructor Create(AOwner: TComponent);override;
    destructor Destroy; override;
    function open_service:Boolean; {打开服务}
    procedure RunLoginErrEvent;

    {TCP数据发送函数}
    procedure tcppark_sendbyte(Vdata : TMemoryStream);
    procedure cskt_Connect(Sender: TObject; Socket: TCustomWinSocket);
    procedure cskt_Disconnect(Sender: TObject;Socket: TCustomWinSocket);
    procedure cskt_Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    procedure cskt_Read(Sender: TObject; Socket: TCustomWinSocket);
    procedure SetSocket_LB(Value:Integer);
    property Socket_LB: Integer read FSocket_LB write SetSocket_LB;
    property OnLoginErrEvent: TLoginErrEvent read FLoginErrEvent write FLoginErrEvent;
  end;
var
  VG_TCP_Client: TTCP_client_service;
  VG_TCP_Client_Market: TTCP_client_service;

implementation
uses
  ElAES,uMain, ulog, uMsgDlg, uLogin;


constructor TTCP_client_service.Create(AOwner: TComponent);
begin
  inherited Create(nil);
  FCMD_data := TMemoryStream.Create;{指令数据}
  IsConErr := False;
  FRetryCount := 0;

  Self.OnConnect := cskt_Connect;
  Self.OnDisconnect := cskt_Disconnect;
  Self.OnError := cskt_Error;
  Self.OnRead := cskt_Read;

  Timer_heatpack := TTimer.Create(nil); {心跳包定时器}
  Timer_heatpack.Enabled := False;
  Timer_heatpack.OnTimer := ONTimer_heatpack; {定时器}
  Timer_heatpack.Interval := TCP_heatpack_time;
end;

function TTCP_client_service.open_service:Boolean; {打开服务}
begin
  try
    Inc(FRetryCount);
    Active := False;
    ClientType := ctNonBlocking;
    Host := VGnetworkset.FnetaddressList[VGnetworkset.netindex].ip ;
    if (FSocket_LB = 0) or

相关推荐

  1. Qt tcp通信客户+服务器一对一)

    2024-07-15 10:40:03       29 阅读
  2. C++ TCP 服务客户通信的例子

    2024-07-15 10:40:03       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 10:40:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 10:40:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 10:40:03       58 阅读
  4. Python语言-面向对象

    2024-07-15 10:40:03       69 阅读

热门阅读

  1. day2 上下文Context

    2024-07-15 10:40:03       22 阅读
  2. 重学PyTorch,粗略笔记(一)

    2024-07-15 10:40:03       23 阅读
  3. 序列标注任务 - CRF条件随机场

    2024-07-15 10:40:03       18 阅读
  4. Python 字典(Dict)详解与实战应用

    2024-07-15 10:40:03       22 阅读
  5. 翁恺-C语言程序设计-07-3. 数素数

    2024-07-15 10:40:03       23 阅读
  6. [C++]this指针

    2024-07-15 10:40:03       24 阅读
  7. [C++]位图+布隆过滤器

    2024-07-15 10:40:03       24 阅读
  8. GESP CCF C++ 五级认证真题 2024年6月

    2024-07-15 10:40:03       28 阅读
  9. 使用Python实现携程并发处理

    2024-07-15 10:40:03       24 阅读