摘要:在分析了證券行情庫結構的基礎上,詳細介紹了開發證券行情庫實時傳送系統的過程。
關鍵詞:行情庫 線程 通訊協議
中圖分類號:TP393.09 文獻標識碼: B 文章編號:1002-2422(2008)01-31-02
1 系統設計與實現
1.1系統運行環境及開發工具
運行環境為Windows系統,服務端機器應在營業部網絡上,能訪問到動態行情數據庫,開發工具選用Visual c++6.0。
1.2系統總體結構
系統采用客戶/服務(Client/Server)方式,服務端可同時接受多個客戶請求,通訊協議為Tcp/Ip。
系統通訊部分采用了MFC(Microsoft FoundationClass)類庫中的CSoeket類,CSocket是微軟為了方便通訊程序開發而包裝了Winsock API的一個類。
數據庫訪問用的是ADO(AetiveX Data Obiect),ADO是Microsoft數據庫應用程序開發的新接口,是建立在OLEDB之上的高層數據庫訪問技術。
1.3服務端設計
服務端功能為將行情庫由硬盤讀入內存中,接受客戶端請求,向客戶端發送行情數據,分為主線程,讀數據線程,通訊線程。
(1)主線程:負責初始化內存數據結構,啟動讀數據線程,定義CListeningSocket類型的變量,對指定端口進行監聽,如果有客戶連接,則創建一個通訊線程為該客戶提供服務。
(2)讀數據線程:定義兩個CADODmabase變量m_-ShDatabase,m_SzDatabase)分別打開上證,深證庫,再定義四個CADORecordset類型變量(m_Show2003Set、m_ZsSet、m_HqSet、m_xxSet),依次讀取show2003.dbf、sjszs.dbf、sjshq.dbf、sjsxx.dbf,循環將每個數據庫的記錄讀入內存中。
(3)通訊線程:通訊線程首先記錄客戶地址、名字,開市時,第一次發送全部數據,然后發送變化數據。發送數據時依次按照上證指數、上證股票、深證指數、深證股票、深證信息這五類結構循環發送。
1.4客戶端設計
客戶端功能為連接服務端,請求行情數據,將行情數據由內存寫入硬盤數據庫中。分為三個線程分別是主線程,寫數據線程,通訊線程。
(1)通訊線程:定義一個CmySocket變量,連接服務端,開市時,先請求全部數據一次,然后循環請求變化數據,將數據寫入內存結構中。
(2)寫數據線程:將內存中的數據保存到show2003.dbf,sjshq.dbf,sjszs.dbf,sjsxx.dbf文件中。
1.5服務端與客戶端的通訊過程
客戶端首先發送連接請求,服務端接收到請求后,記錄客戶端地址、名字,建立與客戶端通訊線程,給客戶端發‘送服務端名字。然后客戶端請求全部數據,服務端依次發送上證指數、上證股票、深證指數、深證股票、深證信息??蛻舳私邮胀耆繑祿?,請求變化數據。服務端循環發送上證指數、上證股票、深證指數、深證股票、深證信息的變化數據,直到閉市。

1.6數據機構
1.6.1內存數據結構
內存數據結構包括以下幾個結構,上海指數S_ZS_Package對應show2003.dbf中指數部分,上海股票Show2003_Package對應show2003.dbf中股票部分,同理還有深圳指數z_ZS_Package,深圳股票Z_HQ_Package,深圳信息z_XX_Package。下面是上證指數部分的內存結構。
struct S_ZS_Package
( WORD pos;
DWORD CedeNum;
double ClosePrice;
double OpenPrice;
double Amount;
double Highest;
double Lowest;
double Newest;
double Volume;};
1.6.2通訊數據結構
通訊協議的數據包包括兩層,外面一層是定義包的類型,包括連接、退出、全部數據,變化數據,公告,F10資料。里面一層在傳送全部數據和變化數據(type=PK-,IYPE_STOCKALL或type=PKTYPE_DYNAMIC)時,定義了五類,分別是上證指數、上證股票、深證指數、深證股票、深證信息。詳細數據結構如下:
#deFine PKTYPE_CONNECT 0
#define PKTYPE_EXIT 1
#define PKTYPE_STOCKALL 2
#define PKTYPE_DYNAMIC 3
#define PKTYPE_NEWS 4
#define PKTYPE_F10 5
#define PKTYPE_ERROR 6
struct_RECV_DATA{
char head[2];
WORD type;
DWORD len;
char IsCompressed;
DWORD beforelen;
DWORD reserved;
char buf[1]; };
行情buf又解釋為5類:
#define SDATATYPE_SHINDEX 0
#define SDATATYPE_SHSTOCK 1
#define SDATATYPE_SZINDEX 2
#define SDATATYPE_SZHQ 3
#define SDATATYPE_SZXX 4
stmct_STOCK_DATA{
char type;
int num;
char data[l];
2 系統運行結果
開市期間,運行穩定,網絡正常時未出現過行情中斷現象,營業部下屬服務部股民表示行情速度及時,實際測試比營業部大廳慢2-4秒左右,成交活躍的股票每分鐘成交次數能在5-7次,較好的實現了行情庫的實時傳送。