期貨量化交易客戶端開源教學第八節——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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/44479.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/44479.shtml
英文地址,請注明出處:http://en.pswp.cn/web/44479.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何從 PDF 中刪除背景

您是否曾經收到過充滿分散注意力背景的掃描 PDF 文檔?也許是帶有繁忙水印的舊收據或背景光線不均勻的掃描文檔。雖然這些背景可能看起來沒什么大不了的,但它們會使您的工作空間變得混亂,并使您難以專注于重要信息。輕松刪除這些不需要的元素并…

短視頻SEO矩陣系統:源碼開發與部署全攻略

在數字化時代,短視頻已成為人們獲取信息、娛樂休閑的重要方式。隨著短視頻平臺的興起,如何讓自己的內容在眾多視頻中脫穎而出,成為每個創作者和內容運營者關注的焦點。本文將為您深入解析短視頻SEO矩陣系統的源碼開發與部署,助您在…

MT6825磁編碼IC在智能雙旋機器人中的應用

MT6825磁編碼IC在智能雙旋機器人中的應用,無疑為這一領域的創新和發展注入了新的活力。作為一款高性能的磁性位置傳感器,MT6825以其獨特的優勢,在智能雙旋機器人的運動控制、定位精度以及系統穩定性等方面發揮了關鍵作用。 www.abitions.com …

django ninja get not allowed 能用 put delete

遇到一個奇怪的問題,django-ninja 編寫的 get post 方法不能使用 # 獲取Material router.get(/material, responseList[MaterialSchemaOut]) paginate(MyPagination) def list_material(request, filters: Filters Query(...)):qs retrieve(request, Material, f…

Midjourney v6.5 可能會在“7月底”發布,并改進了真實感和皮膚紋理

Midjourney v6.5即將發布,這一更新將大幅提升圖像的真實感和皮膚紋理,為用戶帶來更逼真的視覺體驗。首席執行官David Holz在電話會議中宣布,新版本將提高圖像清晰度,特別是在手部和皮膚細節上,同時改進Web應用程序和個…

ABAP調用BAPI時COMMIT WORK AND WAIT未按照預期同步提交問題分析

背景: 在做ABAP開發時,經常會有連續調用BAPI的需求,比如先創建銷售訂單,再依據銷售訂單創建交貨單,再對交貨單進行過賬等類似的一連串調用,這種類似的場景往往需要前一步操作的數據完全寫入數據庫才能進行…

編譯打包自己的云手機(redroid)鏡像

前言 香橙派上跑云手機可以看之前的文章: 香橙派5plus上跑云手機方案一 redroid(帶硬件加速)香橙派5plus上跑云手機方案二 waydroid 還有一個cuttlefish方案沒說,后面再研究,cuttlefish的優勢在于可以自定義內核且selinux是開啟的&#xf…

vue3下載base64文件

如果后端明確告訴你返回的是base64,那請求頭就不用帶responseType: “blob”,和普通的接口一樣發送就行 await materialsFile({ id: proxy.$route.query.id }).then((res) > {if (res) {// atob先解碼base64數據const raw window.atob(res.data);// 獲取解碼后…

vscode 遠程開發

目錄 vscode 遠程連接 選擇 Python 環境 vscode 遠程連接 按 CtrlShiftP 打開命令面板。輸入并選擇 Remote-SSH: Open SSH Configuration File...。選擇 ~/.ssh/config 文件(如果有多個選項)。在打開的文件中添加或修改你的 SSH 配置。 這個可以右鍵…

Jupyter Notebook基礎:用IPython實現動態編程

Jupyter Notebook基礎:用IPython實現動態編程 1. 引言 Jupyter Notebook是一個基于Web的交互式計算環境,允許用戶創建和共享包含實時代碼、方程式、可視化和文本敘述的文檔。它廣泛應用于數據清洗與轉換、數值模擬、統計建模、機器學習以及其他數據科學…

開放開源開先河(一)

2022年7月28日,以“軟件定義世界 開源共筑未來”為主題的全球數字經濟大會開放原子開源峰會在北京開幕,承辦主峰會和為捐贈人進行授牌儀式的開放原子開源基金會再次進入公眾視野。基金會秘書長孫文龍從匯聚全球產業鏈開源力量、核心鏈接能力、開發者分享…

Aop切面編程(2)--代理模式

1、代理模式的理解:不修改A對象的代碼的基礎上,對A代碼塊進行拓展。通過創建ProxyA代理對象,拓展A對象并調用A對象的核心功能; 即:不修改對象的源碼基礎上,創建代理對象,進行功能的附加和增強&…

端到端擁塞控制的本質

昨天整理了一篇 bbr 的微分方程組建模(參見 bbr 建模),算是 bbr 算法終極意義上的一個總結,最后也順帶了對 aimd 的描述,算是我最近比較滿意的一篇分享了。那么接下來的問題,脫離出具體算法,上升到宏觀層面&#xff0c…

git reset hard和soft的使用和區別

在Git中,git reset命令用于撤銷提交、回溯版本和調整工作目錄或暫存區狀態,而不是gitrestore。git reset主要有三種模式:--soft、--mixed(默認)和--hard。以下是關于--hard和--soft兩種模式的使用方法和區別的詳細解釋…

uniapp微信小程序 TypeError: $refs[ref].push is not a function

我的寫法 this.$refs.addPopup.open();報錯 打印出來是這樣的 解決 參考未整理 原因 在當前頁面使用的v-for循環 并且循環體內也有組件使用了ref(而我沒有把每個ref做區別命名) 這樣就導致了我有很多同名的ref,然后就報錯了 解決辦法&a…

AI人工智能作詞,為音樂注入未來之力

在當今的音樂世界中,創新的力量不斷推動著邊界的拓展,而人工智能作詞正以其獨特的魅力,成為引領音樂走向未來的強大動力。 “妙筆生詞智能寫歌詞軟件(veve522)”無疑是這股浪潮中的璀璨明星。它利用先進的人工智能技術…

記錄一次Android推流、錄像踩坑過程

背景: 按照需求,需要支持APP在手機息屏時進行推流、錄像。 技術要點: 1、手機在息屏時能夠打開camera獲取預覽數據 2、獲取預覽數據時進行編碼以及合成視頻 一、息屏時獲取camera預覽數據: ①Camera.setPreviewDisplay(SurfaceH…

通過 Azure OpenAI 服務使用 GPT-35-Turbo and GPT-4(win版)

官方文檔 Azure OpenAI 是微軟提供的一項云服務,旨在將 OpenAI 的先進人工智能模型與 Azure 的基礎設施和服務相結合。通過 Azure OpenAI,開發者和企業可以訪問 OpenAI 的各種模型,如 GPT-3、Codex 和 DALL-E 等,并將其集成到自己…

input上傳--upload

1.HTML <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>上傳文件</title><link rel"…

《C++并發編程實戰》筆記(一、二)

一、簡介 抽象損失&#xff1a;對于實現某個功能時&#xff0c;可以使用高級工具&#xff0c;也可以直接使用底層工具。這兩種方式運行的開銷差異稱為抽象損失。 二、線程管控 2.1 線程的基本控制 1. 創建線程 線程相關的管理函數和類在頭文件&#xff1a; #include <…