<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Vincent.Chan‘s Blog

    常用鏈接

    統(tǒng)計

    積分與排名

    網(wǎng)站

    最新評論

    TUXEDO在文件傳輸中的應用

    TUXEDO在文件傳輸中的應用

    1 引言

      近幾年來,以交易中間件為框架基礎的三層客戶機/服務器模式已被廣泛證實為建立開放式關鍵業(yè)務應用系統(tǒng)的最佳環(huán)境。

      TUXEDO是美國BEA公司的一種交易中間件產(chǎn)品,它在銀行、電信、郵政、金融證券等大規(guī)模關鍵事務處理領域中有著廣泛的應用。它能夠在 C/S環(huán)境下整合各種異構平臺,通過聯(lián)機事務處理機制,保證交易的完整性和數(shù)據(jù)的一致性。BEA TUXEDO是在企業(yè)、Internet 這樣的分布式運算環(huán)境中開發(fā)和管理三層結構的客戶/服務器型關鍵任務應用系統(tǒng)的強有力工具。

      BEA TUXEDO 采用三層結構的客戶機/服務器模式組件軟件模型,該結構利用交易中間件將應用的業(yè)務邏輯、表示邏輯和數(shù)據(jù)分為三個不同的處理層:客戶為第一表示邏輯層,實 現(xiàn)用戶交互和數(shù)據(jù)表示,第二層的邏輯業(yè)務層為應用的主體,負責業(yè)務的邏輯處理,第三層數(shù)據(jù)層負責對數(shù)據(jù)庫的檢索、讀取和更新等操作。交易中間件作為構造三 層結構應用系統(tǒng)的基礎平臺,提供了兩個主要功能:負責客戶機和服務器間的聯(lián)接和通訊;提供一個三層結構應用開發(fā)和運行的平臺。由此可見,交易中間件提供了 一個基礎的框架去幫助你建立、運行和管理一個三層客戶機/服務器模式的應用,使你不需要從零做起,大大縮短了應用開發(fā)的時間,提高了應用開發(fā)的成功率。

      本文以應用TUXEDO的同步調(diào)用tpcall方式和FML編程方式為例,介紹了在Windows客戶端和Unix服務器之間完成文件傳輸?shù)姆? 法。客戶端調(diào)用VC++制作的傳輸文件的tuxedo動態(tài)鏈接庫,實現(xiàn)Windows客戶端與Unix服務器端傳輸文件(包括上傳和下載文件兩種方式)的 實現(xiàn)方法。

    2 客戶端應用TUXEDO實現(xiàn)文件傳輸方法

      在客戶端,首先設置客戶端與服務器端在文件傳輸中文件塊的大小、文件的塊標識等基本信息,將字節(jié)數(shù)比較大的文件分為很多小塊,利用TUXEDO 的同步調(diào)用tpcall方式循環(huán)調(diào)用后臺的文件處理服務,將字節(jié)數(shù)較大的文件按著塊的大小分多次傳輸?shù)経NIX后臺。下面以下載文件為例講解使用 tuxedo同步調(diào)用tpcall方式完成文件傳輸?shù)睦印?/p>

      首先利用TUXEDO的tpalloc申請需要使用的發(fā)送和接收緩存,使用Fchg32函數(shù)在緩存中放入服務器端需要的域值:文件塊的大小、文件的標識等基本信息。

    SndBuf = (FBFR32 *)tpalloc("FML32", NULL, 1024); /* 申請發(fā)送的緩存 */
    iRet = Fchg32(SndBuf,BLOCKSIZE,0,(char *)&lBlockSize,0); /* 設置文件塊的大小 */
    設置完畢后,開始使用同步tpcall調(diào)用UNIX后臺文件處理FTPSVR服務。
    /* 客戶端同步調(diào)用UNIX平臺文件處理服務*/
    iRet = tpcall("FTPSVR",(char *)SndBuf,0L,(char **)&RcvBuf,(long *)&len,0L);
    iRet = Fget32(RcvBuf, FILELEN, 0, (char *)&lFileLen, 0);/* 接收文件長度*/
    接收文件并將第一塊數(shù)據(jù)寫入文件
    iRet = Fget32(RcvBuf, FILEDATA, 0, pszFileBuf, (FLDLEN32 *)&lFileDataLen);
    fp = fopen(pszCltFileName, "wb+"); /* 創(chuàng)建文件*/
    lBlkLen = fwrite(pszFileBuf,1,lFileDataLen,fp); /* 將接收第一塊數(shù)據(jù)寫入文件*/
    同時計算需要調(diào)用下載文件服務的次數(shù),多次調(diào)用文件服務,將后續(xù)文件下載到客戶端。
    lBlkNum = (lFileLen -1)/lBlockSize +1 ;
    for(i=2; i<lBlkNum+1;i++){
    ……
    iRet = tpcall("FTPSVR",(char *)SndBuf,0L,(char **)&RcvBuf,(long *)&len,0L);
    Fget32(RcvBuf, FILEDATA, 0, pszFileBuf, (FLDLEN32 *)&lBlockSize);
    lBlkLen = fwrite(pszFileBuf, 1, lBlockSize, fp);
    ……

    3 UNIX服務器端實現(xiàn)方法

      在Unix服務器端,接收客戶端發(fā)送過來的緩存內(nèi)容,如:文件塊的大小、文件塊內(nèi)容、文件塊標識等。根據(jù)文件塊的標識移動文件指針來寫文件,每 次文件指針移動的大小由文件塊的大小決定,并將讀取的文件塊的內(nèi)容放入輸出緩存中,并返回給客戶端。Unix服務器端程序例子說明如下:

    FTPSVR(TPSVCINFO *rqst)
    {
    …………
    RcvBuf = (FBFR32 *)rqst->data; /*指向接收客戶端的緩存*/
    iRet = Fget32(RcvBuf, BLOCKID, 0, (char *)&lBlockID, 0); /* 接收client發(fā)送的塊標識*/
    fp = fopen(pszSvrFileName, "rb");  /* 打開文件,準備讀取*/
    (fseek(fp, (lBlockID-1)*lBlockSize, 0)!=0)  /* 根據(jù)塊標識移動文件指針*/
    lReadLen=fread(pszFileBuf, 1, lBlockSize, fp);  /* 讀取文件塊*/
    Fchg32(SndBuf, FILEDATA, 0, pszFileBuf, (FLDLEN32 )lReadLen); /* 將文件塊的內(nèi)容方式放入tuxedo申請的緩存中*/
    tpreturn(TPSUCCESS, 0, (char *)SndBuf, 0L, 0);  /* 將輸出緩存返回給客戶端*/

    4 WINDOWS平臺文件傳輸?shù)脑O計

    4.1 WINDOWS客戶端動態(tài)鏈接庫的實現(xiàn)

      使用PowerBuilder、Delphi、VB等軟件不能直接調(diào)用 C語言源代碼,它們只能調(diào)用動態(tài)鏈接庫文件。下面我們講述如何使用VC++6.0將Windows客戶端的文件傳輸?shù)腃、TUXEDO代碼制作成動態(tài)鏈接 庫供Power Builder、Delphi、VB等程序調(diào)用。
     使用VC++可以制作三種DLL,分別是
     (1)Non-MFC Dlls
     (2).Regular Dlls
     (3)Extension Dlls
      Non-MFC DLL:指的是不用MFC的類庫結構,直接用C語言寫的DLL,其輸出的函數(shù)一般用的是標準C接口,并能被非MFC或MFC編寫的應用程序所調(diào)用。因為我們不使用MFC類庫,所以采用Non-MFC Dlls。

      每一個DLL必須有一個入口點,就象用C編寫的應用程序,必須有一個main函數(shù)一樣. DllMain就是一個缺省的函數(shù)入口。

      創(chuàng)建一個動態(tài)鏈接庫,選擇File->New菜單,彈出New對話框。在Projects標簽頁下,選擇"Win32 Dynamic-Link Library"。Visual C++就會創(chuàng)建動態(tài)鏈接庫所需的工程文件。
    創(chuàng)建ftpfile.def文件,這個文件記錄了可被外部應用程序使用的DLL庫函數(shù)名字。這些名字信息和對應的函數(shù)位置的信息將被編譯進動態(tài)鏈接庫文件中,然后應用程序根據(jù)函數(shù)名字和函數(shù)位置對照表來找到對應的函數(shù)。ftpfile.def內(nèi)容如下:

    LIBRARY "ftpfile"
    EXPORTS
    ftpfile; /*與C代碼中的函數(shù)名稱相同*/
    將ftpfile.def、 源程序ftpfile.cpp、頭文件public.h和ftpfld.h、tuxedo庫文件wtuxws32.lib和libwsc.lib加入到工 程中。選擇Project->add to project->files.然后開始編譯動態(tài)鏈接庫生成ftpfile.dll。
    代碼樣例如下:
    BOOL WINAPI DllMain( HMODULE hModule, DWORD dwReason, LPVOID lpvReserved )
    /* 動態(tài)鏈接庫函數(shù)入口*/
    {
    return TRUE;
    }
    LRESULT WINAPI ftpfile(char* CltFileName,char* SvrFileName,long lBlockSize,long lOptFlag) /* 動態(tài)鏈接庫函數(shù)主體*/
    {
    FBFR32 *RcvBuf,*SndBuf; /*變量聲明*/
    int iRet;
    long i,lBlkLen,len,lFileLen,lBlkNum;
    …………
    /* 動態(tài)鏈接庫程序主體*/
    SndBuf = (FBFR32 *)tpalloc("FML32", NULL, MAXBUFLEN); /*申請發(fā)送緩存*/
    if (SndBuf == NULL)
    {
    userlog("tpalloc sndbuf error errno=[%d] err=[%s]",tpstrerror(tperrno));
    tpterm();
    return TPALLOCERR;
    }
    RcvBuf = (FBFR32 *)tpalloc("FML32", NULL, MAXBUFLEN);/*申請接收緩存*/
    iRet = Fchg32(SndBuf,BLOCKSIZE,0,(char *)&lBlockSize,0); /*把塊大小放入發(fā)送緩存*/
    if (iRet <0){ /*錯誤處理*/
    tpfree((char *)SndBuf);
    tpfree((char *)RcvBuf);
    tpterm();
    return FCHGERR;
    }
    iRet = Fchg32(SndBuf,OPTFLAG,0,(char *)&lOptFlag,0);
    ……………………………
    }/* 程序主體結束*/

    4.2 WINDOWS客戶端動態(tài)鏈接庫的調(diào)用

      以Power Builder7.0為例,講述如何在Power Builder中調(diào)用文件傳輸?shù)目蛻舳藙討B(tài)鏈接庫。

      首先,在Power Builder聲明該函數(shù),聲明如下:
    Function Integer ftpfile(string CltFileName,string SvrFileName,long lBlockSize,long lOptFlag) LIBRARY "ftpfile.dll"
    然后,在程序中就可以應用了。示例如下:
    string CltFileName
    string SvrFileName
    long lBlockSize
    long lOptFlag /*設置文件上傳或下載標志*/
    integer iRet

    CltFileName="..\data\report.txt"
    SvrFileName="../up/form.txt"
    LBlockSize=1024
    LOptFlag=1
    IRet = ftpfile(CltFileName,SvrFileName,lBlockSize,lOptFlag)
    If (iret< 0){
    messagebox('系統(tǒng)提示','調(diào)用ftpfile函數(shù)錯誤')
    return
    }

    5 結束語

      本文通過分析TUXEDO交易中間件的同步調(diào)用TPCALL和FML編程方式,描述了在Windows和UNIX平臺之間如何完成文件傳輸?shù)姆椒ǎ攀隽薟indows平臺如何制作和調(diào)用動態(tài)鏈接庫。

    posted on 2006-09-04 23:16 Vincent.Chen 閱讀(1900) 評論(0)  編輯  收藏 所屬分類: BEA

    主站蜘蛛池模板: 亚洲免费网站观看视频| 国产免费AV片在线观看| 国产福利在线免费| 亚洲明星合成图综合区在线| 99爱视频99爱在线观看免费| 日韩亚洲Av人人夜夜澡人人爽| 日本免费久久久久久久网站| 久久久亚洲精品视频| 无码国产精品一区二区免费3p| 777亚洲精品乱码久久久久久| 91成人在线免费观看| 亚洲国产成人久久精品app| 在线看片无码永久免费视频| 亚洲偷自精品三十六区| 成人免费毛片内射美女APP| 亚洲一本一道一区二区三区| 国产精品色午夜免费视频| 无码免费又爽又高潮喷水的视频 | 国产91免费视频| 亚洲AV成人一区二区三区在线看| 在线观看免费成人| 国产免费福利体检区久久| 少妇中文字幕乱码亚洲影视| 日韩免费一区二区三区在线播放| 亚洲国产成人久久精品大牛影视| 精品亚洲一区二区三区在线观看 | 一级毛片免费不卡在线| 亚洲成人一级电影| 免费在线观看黄网站| 女同免费毛片在线播放| 亚洲人成在线精品| 丁香亚洲综合五月天婷婷| 在线播放免费人成毛片乱码| 亚洲色图激情文学| 亚洲伊人久久综合影院| 91视频免费网址| 亚洲爆乳无码精品AAA片蜜桃| 伊伊人成亚洲综合人网7777| 很黄很色很刺激的视频免费| 免费一级全黄少妇性色生活片 | 国产成A人亚洲精V品无码|