手機(jī)充值繳費(fèi)系統(tǒng)_第1頁
手機(jī)充值繳費(fèi)系統(tǒng)_第2頁
手機(jī)充值繳費(fèi)系統(tǒng)_第3頁
手機(jī)充值繳費(fèi)系統(tǒng)_第4頁
手機(jī)充值繳費(fèi)系統(tǒng)_第5頁
已閱讀5頁,還剩16頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

筆者刖言移動(dòng)通信業(yè)務(wù)中,【】有一部分都是和手機(jī)繳費(fèi)的業(yè)務(wù)相關(guān),而手機(jī)繳費(fèi)業(yè)務(wù)目前處于發(fā)展的階段,手機(jī)繳費(fèi)業(yè)務(wù)作為目前唯一的數(shù)據(jù)業(yè)務(wù)正在飛速發(fā)展中近年來,隨著中國市場經(jīng)濟(jì)的高速發(fā)展的情況下,社會(huì)上出現(xiàn)了很多新消費(fèi)模式,由此移動(dòng)通信行業(yè)衍生出很多新的業(yè)務(wù),具體情況可以總結(jié)為以下幾點(diǎn):這追求效率的時(shí)代,隨著們生活水平的提高,消費(fèi)項(xiàng)目,服務(wù)種類的增加,社會(huì)需要方便和快捷的繳費(fèi)方式。在當(dāng)今網(wǎng)絡(luò)社會(huì),技術(shù)成熟,發(fā)揮網(wǎng)絡(luò)技術(shù)優(yōu)勢,利用網(wǎng)絡(luò)實(shí)現(xiàn)快捷繳費(fèi)已經(jīng)成為可能。利用電子商務(wù)網(wǎng)絡(luò)以及眾多的營業(yè)網(wǎng)點(diǎn)實(shí)時(shí)收費(fèi),在幾乎不增加系統(tǒng)負(fù)擔(dān)的情況既可緩解目前收費(fèi)單位營業(yè)廳的緊張狀況,又方便用戶繳費(fèi),提高了費(fèi)用回收率。手機(jī)繳費(fèi)系統(tǒng)是基于UNIXSocket和MySQL數(shù)據(jù)庫設(shè)計(jì)一個(gè)交易型中間件系統(tǒng)。在Linux環(huán)境下使用GNUC或者GNUC++,在Linuxmake開發(fā)工具的管理和控制下,利用Linux系統(tǒng)提供的Socket庫和MySQL數(shù)據(jù)庫在網(wǎng)絡(luò)底層開發(fā)交易型中間件,同時(shí)簡要介紹了客戶端和服務(wù)器的工作模式。此模擬手機(jī)交費(fèi)系統(tǒng)采用“客戶端一中間件一服務(wù)器”模式,其中主要包括三大部分:客戶端(Client),中間件(Middleware)和服務(wù)器端(Server)??蛻舳?Client)主要實(shí)現(xiàn)用戶管理、查詢、交易(交費(fèi),購物等),撤銷和統(tǒng)計(jì)等功能;中間件(Middleware)要完成與客戶要求相符的功能一一是本地的本地處理,否則發(fā)往服務(wù)器端——接受客戶端數(shù)據(jù),組織服務(wù)器端所需數(shù)據(jù),重組服務(wù)端返回?cái)?shù)據(jù),并返回給客戶方;服務(wù)器端(Server)主要實(shí)現(xiàn)客戶端或中間件提出的業(yè)務(wù)請(qǐng)求并做好留跡工作。本設(shè)計(jì)主要是利用UNIX系統(tǒng)提供的Socket庫在網(wǎng)絡(luò)底層,C語言,MySQL數(shù)據(jù)庫,以及軟件工程的思想方法和TCP/IP設(shè)計(jì)出的一個(gè)模擬手機(jī)交費(fèi)中間件系統(tǒng)。本設(shè)計(jì)包括了模擬手機(jī)交費(fèi)系統(tǒng)的開發(fā)環(huán)境,設(shè)計(jì)目的,總體設(shè)計(jì),詳細(xì)設(shè)計(jì),具體實(shí)現(xiàn)代碼,以及設(shè)計(jì)中遇到的問題及解決方法。將服務(wù)器端(Server),中間件(Middleware)和客戶端(Client)進(jìn)行連接后可模擬出現(xiàn)實(shí)中手機(jī)交費(fèi)的的功能。它可以實(shí)現(xiàn)手機(jī)費(fèi)用查詢,話費(fèi)充值,打印花費(fèi)清單詳目等基本功能。目錄TOC\o"1-5"\h\z一、系統(tǒng)環(huán)境(硬件環(huán)境、軟件環(huán)境)3二、計(jì)目的3三、體設(shè)計(jì)(程序設(shè)計(jì)組成框圖、流程圖、類圖)33.1程序設(shè)計(jì)組成框圖:3\o"CurrentDocument"3.2:中間件模型43.3流程圖5四、詳細(xì)設(shè)計(jì)74.1設(shè)計(jì)方法7\o"CurrentDocument"4.2功能模塊說明7五、調(diào)試與測試9\o"CurrentDocument"5.1調(diào)試方法9\o"CurrentDocument"5.2結(jié)果及簡單分析10\o"CurrentDocument"六、設(shè)計(jì)中遇到的問題及解決方法11\o"CurrentDocument"七、源程序清單12\o"CurrentDocument"八、總結(jié),收獲與體會(huì)37九、參考文獻(xiàn)37一、系統(tǒng)環(huán)境(硬件環(huán)境、軟件環(huán)境)硬件環(huán)境:intelp43.06GHz80G硬盤軟件環(huán)境:基于windowsxp虛擬機(jī)下的RedLinux操作系統(tǒng)二、計(jì)目的本次設(shè)計(jì)的主要課題是:模擬手機(jī)繳費(fèi)系統(tǒng),通過對(duì)移動(dòng)通信話費(fèi)查詢與繳費(fèi)業(yè)務(wù)進(jìn)行了系統(tǒng)全面的分析研究。針對(duì)現(xiàn)有系統(tǒng)中實(shí)時(shí)性不足而造成用戶欠費(fèi)太多使公司企業(yè)蒙受損失的問題。采用開發(fā)工具Linux+My進(jìn)行系統(tǒng)設(shè)計(jì)。基于UinxSocket和MySQL數(shù)據(jù)庫,設(shè)計(jì)一個(gè)交易型中間件系統(tǒng)。提供通訊轉(zhuǎn)發(fā)和協(xié)議轉(zhuǎn)換的橋梁作用。例如電子商務(wù)、銀行代理業(yè)務(wù)軟件等都是這種類型軟件。這里的中間件是指交易型中間件。交易型中間件是指用在不同行業(yè)、不同部門間的通訊轉(zhuǎn)發(fā)和協(xié)議轉(zhuǎn)換的軟件,在不同的行業(yè)、不同的系統(tǒng)間。這里主要是利用UNIX系統(tǒng)提供的Socket庫在網(wǎng)絡(luò)底層,開發(fā)交易型中間件。本設(shè)計(jì)的目的是使參與設(shè)計(jì)者掌握利用軟件工程的思想方法和TCP/IP設(shè)計(jì)出用于不同行業(yè)和部門間的通訊轉(zhuǎn)發(fā)或協(xié)議轉(zhuǎn)換軟件一中間件,尤其掌握這種設(shè)計(jì)的思想和方法。本設(shè)計(jì)系統(tǒng)能夠通過兩種方式提供對(duì)移動(dòng)話費(fèi)信息輸入、查詢、編輯以及話費(fèi)統(tǒng)計(jì)各明細(xì)項(xiàng)目的數(shù)據(jù)編輯,自動(dòng)計(jì)算出花費(fèi)的各項(xiàng)合計(jì)數(shù)據(jù);可自主設(shè)定條件從而達(dá)到對(duì)話費(fèi)數(shù)據(jù)的多角度查詢功能;方便導(dǎo)入、導(dǎo)出數(shù)據(jù)及輸出報(bào)表。三、體設(shè)計(jì)(程序設(shè)計(jì)組成框圖、流程圖、類圖)3?1程序設(shè)計(jì)組成框圖:實(shí)現(xiàn)工具及、方法基本功能、Linux+Mysql+VMwareWorkstation客戶1.手機(jī)余額查詢客戶端發(fā)送:頭部(A)+目標(biāo)(移動(dòng)公司P)+手機(jī)號(hào)碼(15)+機(jī)主姓名(30)中間件發(fā)送:頭部(B)+目標(biāo)(移動(dòng)公司P)+標(biāo)志(O)

端<——>中間件+手機(jī)號(hào)碼(15)+機(jī)主(30)+余額(20)或:頭部(B)目標(biāo)(移動(dòng)公司P)+標(biāo)志(E)+出錯(cuò)原因2.銀行賬戶余額查詢:客戶端發(fā)送:頭部(A)+目標(biāo)(銀行B)+銀行賬戶(19)+密碼(10)中間件發(fā)送:頭部(B)+目標(biāo)(銀行B)+標(biāo)志(0)+戶主(30)+賬號(hào)(19)+余額(20)或:頭部(B)+目標(biāo)(銀行B)+標(biāo)志(E)+錯(cuò)誤信息3.手機(jī)充值客戶端發(fā)送:頭部(C)+手機(jī)號(hào)碼(15)+銀行賬戶(19)+銀行密碼(10)+充值金額(20)中間件發(fā)送:頭部(D)+標(biāo)志(0)或:頭部(D)+標(biāo)志(E)+錯(cuò)誤原因中間件<——>服務(wù)器中間件<---->銀行服務(wù)器查詢余額中間件發(fā)送:頭部(E)+銀行賬戶(19)+密碼(10)服務(wù)器發(fā)送:頭部(F)+標(biāo)志(0)+銀行賬號(hào)(19)+用戶名(30)+余額(20)或:頭部(F)+標(biāo)志(E)+出錯(cuò)原因扣款中間件發(fā)送:頭部(G)+銀行賬戶(19)+密碼(10)+扣款金額(20)服務(wù)器發(fā)送:頭部(H)+標(biāo)志(O)或:頭部(H)+標(biāo)志(E)+出錯(cuò)原因中間件<——>移動(dòng)服務(wù)器查詢余額中間件發(fā)送:頭部(E)+手機(jī)號(hào)碼(15)服務(wù)器發(fā)送:頭部(F)+標(biāo)志(O)+手機(jī)號(hào)碼(15)+機(jī)主姓名(30)+余額(20)或:頭部(F)+標(biāo)志(E)+出錯(cuò)原因繳費(fèi)中間件發(fā)送:頭部(G)+手機(jī)號(hào)碼(15)+繳費(fèi)金額(20)服務(wù)器發(fā)送:頭部(H)+標(biāo)志(O)或:頭部(H)+標(biāo)志(O)+出錯(cuò)原因退出系統(tǒng)當(dāng)完成一次交易時(shí),就可以退出系統(tǒng)。3.2:中間件模型3.3流程圖

、詳細(xì)設(shè)計(jì)4?1設(shè)計(jì)方法在Linux環(huán)境下,使用GNUC或GNUC++,在UNIX/Linuxmake開發(fā)工具的的管理和控制下,利用UNIX/LinuxSocket庫在網(wǎng)絡(luò)的底層進(jìn)行開發(fā)設(shè)計(jì)。4.2功能模塊說明本系統(tǒng)主要是由一個(gè)客戶機(jī),一個(gè)中間件以及兩個(gè)服務(wù)器組成,兩個(gè)服務(wù)器分別負(fù)責(zé)手機(jī)直接繳費(fèi)和網(wǎng)上銀行繳費(fèi)。以下即是每個(gè)模塊間的聯(lián)系圖:(1)客戶機(jī):只負(fù)責(zé)發(fā)送和接收請(qǐng)求信息,此模塊的目的就是將信息呈現(xiàn)給用戶看,并提供相應(yīng)的操作選擇。此模塊處理信息的過程較簡單,原理如基本功能的現(xiàn)金支付所述,在此不再多做介紹。(2)中間件:與客戶機(jī)和服務(wù)器相連接,通過判斷倒數(shù)第二個(gè)字符來判斷選擇哪個(gè)服務(wù)器,具體的是把客戶端發(fā)來的信息轉(zhuǎn)發(fā)給哪個(gè)服務(wù)器。通過服務(wù)器反饋回來信息的特殊字符來判斷此信息是由哪個(gè)服務(wù)器發(fā)送而來。簡單來說,中間件在整個(gè)分布式系統(tǒng)中起數(shù)據(jù)總線的作用,將各種異構(gòu)系統(tǒng)通過中間件有機(jī)地結(jié)合成一個(gè)整體。(3)服務(wù)器:本系統(tǒng)有兩個(gè)服務(wù)器,手機(jī)服務(wù)器(S2)和銀行服務(wù)器(S1)1)手機(jī)服務(wù)器在這一部分,需要實(shí)現(xiàn)的功能是直接繳費(fèi)。它的過程是接收從中間件過來的信息,在手機(jī)服務(wù)器的客戶賬戶上相應(yīng)加上對(duì)應(yīng)的話費(fèi),即更新手機(jī)服務(wù)器數(shù)據(jù)庫。更新成功直接之后,將繳費(fèi)成功的信息傳回中間件。具體流程如下:現(xiàn)金繳納話費(fèi)工作流程圖服務(wù)器數(shù)據(jù)庫,即繳費(fèi)成功。2)銀行服務(wù)器在銀行服務(wù)器這一塊,需要實(shí)現(xiàn)的功能是手機(jī)網(wǎng)上繳費(fèi)。它的過程是接收從中間件過來的信息,在客戶所輸入的銀行賬戶上扣除相應(yīng)的手機(jī)費(fèi)用;如果在手機(jī)的服務(wù)器那一塊出現(xiàn)問題,繳費(fèi)不成功,銀行服務(wù)器還負(fù)責(zé)把之前所扣除的話費(fèi)給加上,具體實(shí)現(xiàn)流程如下:

查詢用戶信息選擇銀行服務(wù)器后整個(gè)系統(tǒng)的工作流程圖:五、調(diào)試與測試5.1調(diào)試方法把數(shù)據(jù)庫文件導(dǎo)入數(shù)據(jù)庫#mysql-uroot<c1.sh#mysql-uroot<middl.sh#mysql-uroot<s1.sh#mysql-uroot<s2.sh啟動(dòng)Mysql數(shù)據(jù)(以bank為例)#showdatabase;#usebank;#showtables;#select*frominformation;對(duì)程序進(jìn)行編譯連接#gcc-oc1c1.c-L/usr/lib/mysql-lmysqlclient#gcc-om1m1.c-L/usr/lib/mysql-lmysqlclient#gcc-os1s1.c-L/usr/lib/mysql-lmysqlclient#gcc-os2s2.c-L/usr/lib/mysql-lmysqlclient(5)運(yùn)行程序#./m1x切換到終端2#./s1world切換到終端3#./s2zhongjr切換到終端4#./m1xmyhttp5?2結(jié)果及簡單分析1:繳費(fèi)======/迎您使用手機(jī)嬲費(fèi)系統(tǒng)====="始手機(jī)繳費(fèi)八查刑祖行喘戶3..該詢手機(jī)余額站退出系統(tǒng)請(qǐng)選樣數(shù)字操作:3請(qǐng)輸入手機(jī)杪F為查調(diào)信息:A手機(jī)號(hào)碼:335237522B4查訓(xùn)成功!!屯詁號(hào)碼:335237522B4手機(jī)戶4iizhactao密戶余禎:4C2.COCOOOOOCfl按回車鍵返回一?銀行繳費(fèi),銀行服務(wù)器與手機(jī)服務(wù)器都對(duì)信息有相應(yīng)的操作,繳費(fèi)得到確認(rèn)成功后,銀行卡上減去100元,手機(jī)話費(fèi)加上100元2:查詢========域迎您憤用于機(jī)巍我系吮======],始手機(jī)繳鏈4查訓(xùn)根行賬戶3,查血手機(jī)命敖私退由系統(tǒng)情迷樣數(shù)字操作:公請(qǐng)輸入銀行賬號(hào)OG140724S請(qǐng)輸入銀行密恂I2S以F為查訓(xùn)信息:A銀行賬戶06140724S密碼】約查詢成功?。°y行戶.站zhaotao跟行賬號(hào)¥OB1407248銀行兼額:9997.0000000000按回車鍵返回整,六、設(shè)計(jì)中遇到的問題及解決方法我們遇到的第一個(gè)問題就是:傳送的消息有許多亂碼,后來分析得出是字符串?dāng)?shù)組沒有清零,調(diào)用bzero(),清空后問題解決。在取系統(tǒng)日期時(shí),我們的函數(shù)看著也沒什么問題,但總提示有錯(cuò)誤,最后發(fā)現(xiàn)原來忘記了頭文件include<time.h>,加上后就正確了。還有一個(gè)最可惡的問題,老是莫名奇妙的出現(xiàn)”段錯(cuò)誤”,開始時(shí)摸不著頭腦,就和同學(xué)一塊商量,憑著各自了了的一點(diǎn)經(jīng)驗(yàn)討論,還好最后都解決了,主要時(shí)字符串末尾一定要加‘\0’,表示結(jié)束,否則可能是越界。主要問題:(1)對(duì)Mysql數(shù)據(jù)庫不夠了解,對(duì)很多數(shù)據(jù)結(jié)構(gòu)和算法也理解不夠牢固,因此我們參考了《Linux+php+Mysql基礎(chǔ)與提高》這本書,學(xué)到一些關(guān)于Mysql的基礎(chǔ)知識(shí),才使工作能順利的進(jìn)行下去。(2)對(duì)套接字這樣的概念不是很清楚,在老師的輔導(dǎo)和互聯(lián)網(wǎng)的幫助下,了解了一些這方面的知識(shí),才使我們的設(shè)計(jì)開展下來。(3)以前對(duì)服務(wù)器,客戶端只是了解理論知識(shí),這次而要自己動(dòng)手來開發(fā)服務(wù)器,這對(duì)我們來說,是一個(gè)巨大的挑戰(zhàn),服務(wù)器就是一個(gè)進(jìn)程,確切的說是一個(gè)守候進(jìn)程,要實(shí)現(xiàn)它的功能,是不容易的事情,你要學(xué)會(huì)套接字,地址轉(zhuǎn)換,服務(wù)器相關(guān)的數(shù)據(jù)結(jié)構(gòu)和算法才能進(jìn)行開發(fā)和設(shè)計(jì)。(4)還是很多基礎(chǔ)的東西沒有掌握好,基本的算法也沒有完全掌握,參考了教科書的相關(guān)內(nèi)容后,才開始了我們的課程設(shè)計(jì)。

(5)在數(shù)據(jù)庫的編寫時(shí),很多要用到的數(shù)據(jù)類型而我們又沒有學(xué)過的,只能借助互聯(lián)網(wǎng)的強(qiáng)大功能了,由此,我們也學(xué)到了很多相關(guān)的知識(shí)。七、源程序清單中間件代碼:#include<sys/socket.h>#include<sys/un.h>#include<netinet/in.h>#include<errno.h>#include<unistd.h>#include<signal.h>#include<sys/wait.h>#include<netdb.h>#include<stdlib.h>#include<fcntl.h>#include<time.h>intmain(intargc,char*argv[]){中間件代碼:#include<sys/socket.h>intlog(char*filepath,char*buff);charlog_file[10]="mid.log”;charlog_buf[1024];〃網(wǎng)絡(luò)通信信息intlisten_fd;//監(jiān)聽套接字描述符intcom_fd;//通信套接字描述符intlen;//請(qǐng)求方地址長度intret;pid_tpid;//處理請(qǐng)求進(jìn)程idstructservent*sp;//存放服務(wù)器端口信息,從services文件讀取structsockaddr_insrv_addr;//服務(wù)器地址structsockaddr_inclt_addr;//客戶端地址listen_fd=socket(PF_INET,SOCK_STREAM,0);/創(chuàng)建監(jiān)聽套接字〃數(shù)據(jù)庫連接信息MYSQLmysql;//MySQL連接MYSQL_ROWrow;//結(jié)果的行MYSQL_RES*result;//查詢結(jié)果charmyl_buf[1024];//存放sql語句〃初始化網(wǎng)絡(luò)連接參數(shù)intDataSend(char*service,char*dest,charsed_buf[1024],charrcv_buf[1024]);if(listen_fd<0){perror(-創(chuàng)建監(jiān)聽套接字失敗,');strcpy(log_buf,”創(chuàng)建監(jiān)聽套接字失敗”);log(log_file,log_buf);return1;}//從services文件中獲取服務(wù)器端口號(hào)if((sp=getservbyname(argv[1],"tcp"))==NULL){fprintf(stderr,"參數(shù)錯(cuò)誤”);strcpy(log_buf,"參數(shù)錯(cuò)誤");log(log_file,log_buf);exit(-5);}memset(&srv_addr,0,sizeof(srv_addr));//將srv_addr初始化為全0〃設(shè)定地址參數(shù)srv_addr.sin_family=AF_INET;srv_addr.sin_addr.s_addr=htonl(INADDR_ANY);srv_addr.sin_port=sp->s_port;〃綁定服務(wù)套接字ret=bind(listen_fd,(structsockaddr*)&srv_addr,sizeof(srv_addr));if(ret==-1){perror("綁定服務(wù)套接字失敗”);strcpy(log_buf,”綁定服務(wù)套接字失敗");log(log_file,log_buf);close(listen_fd);return1;}〃監(jiān)聽客戶連接ret=listen(listen_fd,1024);if(ret==-1){perror(-監(jiān)聽客戶請(qǐng)求失敗,');strcpy(log_buf,”監(jiān)聽客戶請(qǐng)求失敗”);log(log_file,log_buf);close(listen_fd);return1;}//連接users數(shù)據(jù)庫if(mysql_init(&mysql)==NULL){fprintf(stderr,"數(shù)據(jù)連接初始失敗”);strcpy(log_buf,”數(shù)據(jù)連接初始失敗”);log(log_file,log_buf);exit(-1);}if(!mysql_real_connect(&mysql,"localhost”,"root”,0,"users”,0,NULL,0)){fprintf(stderr,"數(shù)據(jù)庫連接錯(cuò)誤:%s[%d]\n",mysql_error(&mysql),mysql_errno(&mysql));mysql_close(&mysql);exit(-2);}〃開始接受客戶請(qǐng)求printf("等待客戶連接\n");while(1){len=sizeof(clt_addr);com_fd=accept(listen_fd,(structsockaddr*)&clt_addr,&len);if(com_fd<0){perror("接受客戶端連接請(qǐng)求失敗,');strcpy(log_buf,"接受客戶端連接請(qǐng)求失敗,');log(log_file,log_buf);close(listen_fd);return1;}if((pid=fork())==-1){printf(-開創(chuàng)進(jìn)程失敗,,);strcpy(log_buf,"開創(chuàng)進(jìn)程失敗");log(log_file,log_buf);return1;}if(pid==0)〃創(chuàng)建子進(jìn)程成功{close(listen_fd);//關(guān)閉監(jiān)聽套接字〃處理接受到的數(shù)據(jù)charsend_buf[1024];intlen;if(len=read(com_fd,send_buf,1024)>0){if(send_buf[0]=='C'){printf(-收到充值請(qǐng)求,信息如下\n");printf("%s\n",send_buf);printf("手機(jī)號(hào)碼:%s\n",send_buf+2);printf("銀行賬號(hào):%s\n”,send_buf+17);printf("銀行密碼:%s\n”,send_buf+36);printf("充值金額:%s\n”,send_buf+46);charp_send[1024];charp_rcv[1024];charb_send[1024];charb_rcv[1024];〃繳費(fèi)封包memcpy(p_send,"G”,2);memcpy(p_send+2,send_buf+2,15);memcpy(p_send+17,send_buf+46,20);//扣款封包memcpy(b_send,"G”,2);memcpy(b_send+2,send_buf+17,19);memcpy(b_send+21,send_buf+36,10);memcpy(b_send+31,send_buf+46,20);DataSend(argv[2],argv[3],b_send,b_rcv);printf(-銀行數(shù)據(jù)已發(fā)送\n");chart[1024];memcpy(t,"D",2);if(b_rcv[2]=='O'){DataSend(argv[4],argv[5],p_send,p_rcv);printf("移動(dòng)公司數(shù)據(jù)已發(fā)送\n");if(p_rcv[2]=='O'){printf(”充值成功\n");memcpy(t+2,"O”,2);write(com_fd,t,1024);}elseif(p_rcv[2]=='E'){memcpy(t+2,"E”,2);memcpy(t+4,p_rcv+4,50);write(com_fd,t,1024);}elseif(b_rcv[2]=='E'){memcpy(t+2,"E”,2);memcpy(t+4,b_rcv+4,50);}}if(send_buf[0]=='A'){printf(叫攵到查詢請(qǐng)求:\n");if(send_buf⑵=='B'){printf(叫攵到銀行查詢,信息如下\n");printf("%s\n",send_buf);printf("%s\n",send_buf+2);printf("銀行賬號(hào):%s\n”,send_buf+4);printf("銀行密碼:%s\n”,send_buf+23);chartmp[1024];chartmp_r[1024];memcpy(tmp,"E”,2);memcpy(tmp+2,send_buf+4,19);memcpy(tmp+21,send_buf+23,10);printf("銀行賬號(hào):%s\n”,tmp+2);printf("銀行密碼:%s\n",tmp+21);DataSend(argv[2],argv[3],tmp,tmp_r);printf("%s\n",tmp_r);printf("%s\n",tmp_r+2);printf("%s\n",tmp_r+4);printf("%s\n",tmp_r+6);printf("%s\n",tmp_r+36);printf("%s\n”,tmp_r+55);write(com_fd,tmp_r,1024);}elseif(send_buf[2]=='P'){printf("收到手機(jī)查詢,信息如下\n");printf("%s\n",send_buf);printf("%s\n",send_buf+2);printf("手機(jī)號(hào)碼:%s\n",send_buf+4);chartmp[1024];chartmp_r[1024];memcpy(tmp,"E”,2);memcpy(tmp+2,send_buf+4,15);printf("手機(jī)賬號(hào):%s\n",tmp+2);DataSend(argv[4],argv[5],tmp,tmp_r);printf("%s\n",tmp_r);printf("%s\n",tmp_r+2);printf("%s\n",tmp_r+4);printf("%s\n",tmp_r+6);printf("%s\n",tmp_r+21);printf("%s\n",tmp_r+57);write(com_fd,tmp_r,1024);}exit(0);}〃回到父進(jìn)程if(pid>0){wait(0);close(com_fd);//關(guān)閉通信套接字continue;}}intDataSend(char*service,char*dest,charsed_buf[1024],charrcv_buf[1024])//參數(shù)為服務(wù)端口端口號(hào)和主機(jī)名及需要發(fā)送的數(shù)據(jù){structhostent*hp;//服務(wù)地址structsockaddr_insin;//指明連接地址信息structservent*sp;//服務(wù)端口ints;//連接描述符〃獲取服務(wù)端口號(hào)if((sp=getservbyname(service,"tcp"))==NULL){fprintf(stderr,"Error:getservbyname");exit(-5);}〃獲取目的主機(jī)if((hp=gethostbyname(dest))==0){fprintf(stderr,"Error:gethostbyname");exit(-6);}〃初始化服務(wù)套接字bzero(&sin,sizeof(sin));bcopy(hp->h_addr,&sin.sin_addr,hp->h_length);sin.sin_family=hp->h_addrtype;sin.sin_port=sp->s_port;if((s=socket(AF_INET,SOCK_STREAM,0))==-1){fprintf(stderr,"Error:socket");exit(-6);}if(connect(s,&sin,sizeof(sin))==-1){fprintf(stderr,"Error:connect");close(s);exit(-6);}〃發(fā)送數(shù)據(jù)//fprintf(stderr,"%sissendingrequestmessage:%s\n",argv[0],sed_buf);if(write(s,sed_buf,1024)!=1024)//toserver{fprintf(stderr,"WriteSocketsERROR\n!");close(s);exit(-1);}if(read(s,rcv_buf,1025)==0)//getreplayfromserver{fprintf(stderr,"ReadSocketsError\n");close(s);exit(-2);}printf("%s\n",rcv_buf);//printf("%sgetreply:%s\n",argv[0],sed_buf);close(s);}}intlog(char*filepath,char*buff){intfd;time_tt=time(0);chartmp[64];strftime(tmp,sizeof(tmp),"%Y/%m/%d%X%A",localtime(&t));if((fd=open(filepath,O_WRONLYIO_CREATIO_APPEND,0644))==-1){fprintf(stderr,"Logfile%sopenerror!\a\n",log);exit(-1);}write(fd,tmp,strlen(tmp));write(fd,":",2);write(fd,buff,strlen(buff));write(fd,"\n",2);close(fd);}銀行端:intlog(char*filepath,char*buff){intfd;time_tt=time(0);chartmp[64];strftime(tmp,sizeof(tmp),"%Y/%m/%d%X%A",localtime(&t));if((fd=open(filepath,O_WRONLYIO_CREATIO_APPEND,0644))==-1){fprintf(stderr,"Logfile%sopenerror!\a\n",log);exit(-1);}write(fd,tmp,strlen(tmp));write(fd,":",2);write(fd,buff,strlen(buff));write(fd,"\n",2);close(fd);}intmain(intargc,char*argv[]){intlog(char*filepath,char*buff);charlog_file[10]="bank.log";charlog_buf[1024];intfd;//日志文件描述符〃網(wǎng)絡(luò)通信信息intlisten_fd;//監(jiān)聽套接字描述符intcom_fd;//通信套接字描述符intlen;//請(qǐng)求方地址長度intret;pid_tpid;//處理請(qǐng)求進(jìn)程idstructservent*sp;//存放服務(wù)器端口信息,從services文件讀取structsockaddr_insrv_addr;//服務(wù)器地址structsockaddr_inclt_addr;//客戶端地址listen_fd=socket(PF_INET,SOCK_STREAM,0);/創(chuàng)建監(jiān)聽套接字〃數(shù)據(jù)庫連接信息MYSQLmysql;//MySQL連接MYSQL_ROWrow;//結(jié)果的行MYSQL_RES*result;//查詢結(jié)果charmyl_buf[1024];//存放sql語句〃初始化網(wǎng)絡(luò)連接參數(shù)if(listen_fd<0)perror(-創(chuàng)建監(jiān)聽套接字失敗,');strcat(log_buf,”創(chuàng)建監(jiān)聽套接字失敗”);log(log_file,log_buf);return1;}//從services文件中獲取服務(wù)器端口號(hào)if((sp=getservbyname(argv[1],"tcp"))==NULL){fprintf(stderr,"參數(shù)錯(cuò)誤”);exit(-5);}memset(&srv_addr,0,sizeof(srv_addr));//將srv_addr初始化為全0〃設(shè)定地址參數(shù)srv_addr.sin_family=AF_INET;srv_addr.sin_addr.s_addr=htonl(INADDR_ANY);srv_addr.sin_port=sp->s_port;〃綁定服務(wù)套接字ret=bind(listen_fd,(structsockaddr*)&srv_addr,sizeof(srv_addr));if(ret==-1){perror("綁定服務(wù)套接字失敗”);strcat(log_buf,”綁定服務(wù)套接字失敗");log(log_file,log_buf);close(listen_fd);return1;}〃監(jiān)聽客戶連接ret=listen(listen_fd,1024);if(ret==-1){perror(-監(jiān)聽客戶請(qǐng)求失敗,');strcat(log_buf,”監(jiān)聽客戶請(qǐng)求失敗”);log(log_file,log_buf);close(listen_fd);return1;}〃連接users數(shù)據(jù)庫if(mysql_init(&mysql)==NULL){fprintf(stderr,"數(shù)據(jù)連接初始失敗”);strcat(log_buf,”數(shù)據(jù)連接初始失敗”);log(log_file,log_buf);exit(-1);}if(!mysql_real_connect(&mysql,"localhost”,"root”,0,"bank”,0,NULL,0)){fprintf(stderr,"數(shù)據(jù)庫連接錯(cuò)誤:%s[%d]\n",mysql_error(&mysql),mysql_errno(&mysql));mysql_close(&mysql);exit(-2);}〃開始接受客戶請(qǐng)求printf("等待客戶連接\n");while(1){len=sizeof(clt_addr);com_fd=accept(listen_fd,(structsockaddr*)&clt_addr,&len);if(com_fd<0){perror("接受客戶端連接請(qǐng)求失敗,');strcat(log_buf,”接受客戶端連接請(qǐng)求失敗");log(log_file,log_buf);close(listen_fd);return1;}if((pid=fork())==-1){printf(-開創(chuàng)進(jìn)程失敗,,);return1;}〃創(chuàng)建子進(jìn)程成功if(pid==0){close(listen_fd);//關(guān)閉監(jiān)聽套接字〃處理接受到的數(shù)據(jù)charsend_buf[1024];intlen;if(len=read(com_fd,send_buf,1024)>0){if(send_buf[0]=='G'){printf(-收到充值請(qǐng)求,信息如下\n");printf("%s\n",send_buf);printf("銀行賬號(hào)%s\n”,send_buf+2);printf("銀行密碼%s\n”,send_buf+21);printf("充值金額%s\n”,send_buf+31);〃更新數(shù)據(jù)庫sprintf(myl_buf,"select*frombankwherenumber=\"%s\"",send_buf+2);if(mysql_query(&mysql,myl_buf)!=0){fprintf(stderr,"數(shù)據(jù)查詢錯(cuò)誤:%s[%d]\n",mysql_error(&mysql),mysql_errno(&mysql));mysql_close(&mysql);exit(-3);}if((result=mysql_store_result(&mysql))==NULL){fprintf(stderr,"存放數(shù)據(jù)失敗:%s[%d]\n",mysql_error(&mysql),mysql_errno(&mysql));mysql_free_result(result);mysql_close(&mysql);exit(-4);};if((mysql_num_rows(result))==0){printf("用戶不存在!\n");strcat(log_buf,"用戶不存在!”);log(log_file,log_buf);}row=mysql_fetch_row(result);if(strcmp(row[1],send_buf+21)!=0){printf("密碼錯(cuò)誤\n");}else{floatmoney;money=atof(row[3])-atof(send_buf+31);printf("余額變更為:%f\n",money);if(money>=0){charbuff[1024];sprintf(myl_buf,"updatebanksetmoney=%fwherenumber=\"%s\"”,money,row[0]);if(mysql_query(&mysql,myl_buf)!=0){fprintf(stderr,"數(shù)據(jù)查詢錯(cuò)誤:%s[%d]\n”,mysql_error(&mysql),mysql_errno(&mysql));mysql_close(&mysql);exit(-3);}else{printf("更新成功??!");}memcpy(buff,"H”,2);memcpy(buff+2,"O”,2);write(com_fd,buff,1024);}}}if(send_buf[0]=='E'){printf("收到銀行查詢,信息如下\n");printf("%s\n",send_buf);printf("銀行賬號(hào):%s\n”,send_buf+2);printf("銀行密碼:%s\n",send_buf+21);charnumber[19];//銀行賬號(hào)charpassword[10];//密碼charname[30];//戶主姓名sprintf(myl_buf,"select*frombankwherenumber=\"%s\"",send_buf+2);if(mysql_query(&mysql,myl_buf)!=0){fprintf(stderr,"數(shù)據(jù)查詢錯(cuò)誤:%s[%d]\n",mysql_error(&mysql),mysql_errno(&mysql));mysql_close(&mysql);exit(-3);}if((result=mysql_store_result(&mysql))==NULL){fprintf(stderr,"存放數(shù)據(jù)失敗:%s[%d]\n",mysql_error(&mysql),mysql_errno(&mysql));mysql_free_result(result);mysql_close(&mysql);exit(-4);};if((mysql_num_rows(result))==0){printf("用戶不存在!\n");strcat(log_buf,"用戶不存在!”);log(log_file,log_buf);}row=mysql_fetch_row(result);if(strcmp(row[1],send_buf+21)!=0){printf("密碼錯(cuò)誤\n");strcat(log_buf,"密碼錯(cuò)誤!");log(log_file,log_buf);}else{printf("%s\n",row⑵);printf("%s\n",row[0]);printf("%s\n”,row[3]);chartmp[1024];memcpy(tmp,"B”,2);memcpy(tmp+2,"B”,2);memcpy(tmp+4,"O”,2);memcpy(tmp+6,row[2],30);memcpy(tmp+36,row[0],19);memcpy(tmp+55,row[3],20);write(com_fd,tmp,1024);printf("%i”,sizeof(tmp));close(com_fd);}}}exit(0);}〃回到父進(jìn)程if(pid>0){wait(0);close(com_fd);//關(guān)閉通信套接字continue;}}}手機(jī)端:intlog(char*filepath,char*buff){intfd;time_tt=time(0);chartmp[64];strftime(tmp,sizeof(tmp),"%Y/%m/%d%X%A",localtime(&t));if((fd=open(filepath,O_WRONLYIO_CREATIO_APPEND,0644))==-1){fprintf(stderr,"Logfile%sopenerror!\a\n",log);exit(-1);}write(fd,tmp,strlen(tmp));write(fd,":",2);write(fd,buff,strlen(buff));write(fd,"\n",2);close(fd);}intmain(intargc,char*argv[]){intlog(char*filepath,char*buff);charlog_file[10]="phone.log";charlog_buf[1024];//網(wǎng)絡(luò)通信信息intfd;//日志文件描述符intlisten_fd;//監(jiān)聽套接字描述符intcom_fd;//通信套接字描述符intlen;//請(qǐng)求方地址長度intret;pid_tpid;//處理請(qǐng)求進(jìn)程idstructservent*sp;//存放服務(wù)器端口信息,從services文件讀取structsockaddr_insrv_addr;//服務(wù)器地址structsockaddr_inclt_addr;//客戶端地址listen_fd=socket(PF_INET,SOCK_STREAM,0);/創(chuàng)建監(jiān)聽套接字charbuff[1024];〃數(shù)據(jù)庫連接信息MYSQLmysql;//MySQL連接MYSQL_ROWrow;//結(jié)果的行MYSQL_RES*result;//查詢結(jié)果charmyl_buf[1024];//存放sql語句〃初始化網(wǎng)絡(luò)連接參數(shù)if(listen_fd<0){perror("創(chuàng)建監(jiān)聽套接字失敗,');strcat(log_buf,"創(chuàng)建監(jiān)聽套接字失敗");log(log_file,log_buf);return1;}//從services文件中獲取服務(wù)器端口號(hào)if((sp=getservbyname(argv[1],"tcp"))==NULL){fprintf(stderr,"參數(shù)錯(cuò)誤”);exit(-5);}memset(&srv_addr,0,sizeof(srv_addr));//將srv_addr初始化為全0〃設(shè)定地址參數(shù)srv_addr.sin_family=AF_INET;srv_addr.sin_addr.s_addr=htonl(INADDR_ANY);srv_addr.sin_port=sp->s_port;〃綁定服務(wù)套接字ret=bind(listen_fd,(structsockaddr*)&srv_addr,sizeof(srv_addr));if(ret==-1){perror("綁定服務(wù)套接字失敗”);strcat(log_buf,”綁定服務(wù)套接字失敗");log(log_file,log_buf);close(listen_fd);return1;}ret=listen(listen_fd,1024);〃監(jiān)聽客戶連接if(ret==-1){perror(-監(jiān)聽客戶請(qǐng)求失敗,');strcat(log_buf,”監(jiān)聽客戶請(qǐng)求失敗”);log(log_file,log_buf);close(listen_fd);return1;}if(mysql_init(&mysql)==NULL)〃連接users數(shù)據(jù)庫{fprintf(stderr,"數(shù)據(jù)連接初始失敗”);strcat(log_buf,”數(shù)據(jù)連接初始失敗”);log(log_file,log_buf);exit(-1);}if(!mysql_real_connect(&mysql,"localhost”,"root”,0,"phone”,0,NULL,0)){fprintf(stderr,"數(shù)據(jù)庫連接錯(cuò)誤:%s[%d]\n",mysql_error(&mysql),mysql_errno(&mysql));strcat(log_buf,"數(shù)據(jù)庫連接錯(cuò)誤");log(log_file,log_buf);mysql_close(&mysql);exit(-2);}〃開始接受客戶請(qǐng)求printf("等待客戶連接\n");while(1){len=sizeof(clt_addr);com_fd=accept(listen_fd,(structsockaddr*)&clt_addr,&len);if(com_fd<0){perror("接受客戶端連接請(qǐng)求失敗,');strcat(log_buf,”接受客戶端連接請(qǐng)求失敗");log(log_file,log_buf);close(listen_fd);return1;}if((pid=fork())==-1){printf(-開創(chuàng)進(jìn)程失敗,,);strcat(log_buf,”開創(chuàng)進(jìn)程失敗”);log(log_file,log_buf);return1;}〃創(chuàng)建子進(jìn)程成功if(pid==0){close(listen_fd);//關(guān)閉監(jiān)聽套接字charsend_buf[1024];intlen;if(len=read(com_fd,send_buf,1024)>0){if(send_buf[0]=='G'){printf(-收到繳費(fèi)請(qǐng)求,信息如下\n");printf("%s\n",send_buf);printf("手機(jī)號(hào)碼%s\n”,send_buf+2);printf('繳費(fèi)金額%s\n”,send_buf+17);sprintf(myl_buf,"select*fromphonewherenumber=\"%s\"",send_buf+2);if(mysql_query(&mysql,myl_buf)!=0){fprintf(stderr,"數(shù)據(jù)查詢錯(cuò)誤:%s[%d]\n",mysql_error(&mysql),mysql_errno(&mysql));mysql_close(&mysql);memcpy(buff,"H”,2);memcpy(buff+2,"E”,2);memcpy(buff+4,”銀行服務(wù)器錯(cuò)誤”,14);exit(-3);}if((result=mysql_store_result(&mysql))==NULL){fprintf(stderr,”存放數(shù)據(jù)失?。?s[%d]\n",mysql_error(&mysql),mysql_errno(&mysql));mysql_free_result(result);mysql_close(&mysql);exit(-4);memcpy(buff,"H”,2);memcpy(buff+2,"E”,2);memcpy(buff+4,”銀行服務(wù)器錯(cuò)誤”,20);strcat(log_buf,”銀行服務(wù)器錯(cuò)誤");log(log_file,log_buf);};row=mysql_fetch_row(result);if((mysql_num_rows(result))==0){printf("手機(jī)號(hào)碼不存在!\n");memcpy(buff,"H”,2);memcpy(buff+2,"E”,2);memcpy(buff+4,"手機(jī)號(hào)碼不存在!”,20);strcat(log_buf,"手機(jī)號(hào)碼不存在!”);log(log_file,log_buf);}else{floatmoney;money=atof(row[2])+atof(send_buf+17);if(money>=0){printf(”余額變更為:%f\n",money);sprintf(myl_buf,"updatephonesetmoney=%fwherenumber=\"%s\"”,money,row[0]);if(mysql_query(&mysql,myl_buf)!=0){fprintf(stderr,"數(shù)據(jù)查詢錯(cuò)誤:%s[%d]\n",mysql_error(&mysql),mysql_errno(&mysql));mysql_close(&mysql);exit(-3);}else{printf("更新成功\n");memcpy(buff,"H”,2);memcpy(buff+2,"O”,2);}}}//printf('錯(cuò)誤信息:%s\n”,buff+4);write(com_fd,buff,1024);}}if(send_buf[0]=='E'){printf("收到手機(jī)余額查詢,信息如下\n");printf("%s\n",send_buf);printf("手機(jī)號(hào)碼:%s\n",send_buf+2);charnumber[19];//銀行賬號(hào)charname[30];//戶主姓名sprintf(myl_buf,"select*fromphonewherenumber=\"%s\"”,send_buf+2);if(mysql_query(&mysql,myl_buf)!=0){fprintf(stderr,"數(shù)據(jù)查詢錯(cuò)誤:%s[%d]\n",mysql_error(&mysql),mysql_errno(&mysql));mysql_close(&mysql);memcpy(buff,"F",2);memcpy(buff+2,"E”,2);memcpy(buff+4,”服務(wù)器錯(cuò)誤”,14);exit(-3);}if((result=mysql_store_result(&mysql))==NULL){fprintf(stderr,"存放數(shù)據(jù)失敗:%s[%d]\n",mysql_error(&mysql),mysql_errno(&mysql));mysql_free_result(result);mysql_close(&mysql);exit(-4);memcpy(buff,"F",2);memcpy(buff+2,"E”,2);memcpy(buff+4,”服務(wù)器錯(cuò)誤”,20);};row=mysql_fetch_row(result);if((mysql_num_rows(result))==0){strcat(log_buf,"用戶不存在!");log(log_file,log_buf);printf("用戶不存在!\n");memcpy(buff,"F",2);memcpy(buff+2,"E”,2);memcpy(buff+4,',用戶不存在!",20);}else{printf("%s\n",row[0]);printf("%s\n",row[1]);printf("%s\n",row⑵);memcpy(buff,"B",2);memcpy(buff+2,"P",2);memcpy(buff+4,"O",2);memcpy(buff+6,row[0],15);memcpy(buff+21,row[1],30);memcpy(buff+57,row[2],20);//sprintf(tmp+55,"%s”,row[3]);}write(com_fd,buff,1024);}exit(0);}if(pid>0){wait(0);close(com_fd);//關(guān)閉通信套接字continue;}}}客戶端:intlog(char*filepath,char*buff){intfd;time_tt=time(0);chartmp[64];strftime(tmp,sizeof(tmp),"%Y/%m/%d%X%A",localtime(&t));if((fd=open(filepath,O_WRONLYIO_CREATIO_APPEND,0644))==-1){fprintf(stderr,"Logfile%sopenerror!\a\n",log);exit(-1);}write(fd,tmp,strlen(tmp));write(fd,":",2);write(fd,buff,strlen(buff));write(fd,"\n”,2);close(fd);}intmain(intargc,char*argv[]){intlog(char*filepath,char*buff);charlog_buf[1024];intfd;//日志文件描述符charlog_file[10]="clt.log”;//日志文件charuser[20];//用戶,用于登陸客戶端charuser_p[10];//密碼,用戶登陸客戶端charpname[20];//機(jī)主姓名charphone[15];//手機(jī)號(hào)碼floatphone_m;//手機(jī)余額charbname[20];//銀行賬號(hào)中名字charnumber[19];//銀行賬號(hào)charpassword[10];//銀行密碼floatbank_m;〃銀行賬戶余額charmoney[20];//充值金額MYSQLmysql;//MySQL連接MYSQL_ROWrow;//結(jié)果的行MYSQL_RES*result;//查詢結(jié)果charmyl_buf[1024];//存放sql語句charsend_buf[1024];//發(fā)送緩沖charrecive_buf[1024];//接收緩沖intconnect_fd;//連接描述符intlen;structservent*sp;//服務(wù)端口信息structhostent*hp;//服務(wù)器地址intret;staticstructsockaddr_insrv_addr;〃連接users數(shù)據(jù)庫if(mysql_init(&mysql)==NULL){fprintf(stderr,"數(shù)據(jù)連接初始失敗”);exit(-1);}if(!mysql_real_connect(&mysql,"localhost”,"root”,0,"users”,0,NULL,0)){fprintf(stderr,"數(shù)據(jù)庫連接錯(cuò)誤:%s[%d]\n",mysql_error(&mysql),mysql_errno(&mysql));mysql_close(&mysql);exit(-2);}system("clear");login:printf(-請(qǐng)輸入用戶名:\n");scanf("%s",user);printf("請(qǐng)輸入密碼:\n");scanf("%s”,user_p);〃驗(yàn)證用戶名與密碼sprintf(myl_buf,"select*fromuserswherename=\"%s\"”,user);if(mysql_query(&mysql,myl_buf)!=0){fprintf(stderr,"數(shù)據(jù)查詢錯(cuò)誤:%s[%d]\n",mysql_error(&mysql),mysql_errno(&mysql));mysql_close(&mysql);exit(-3);}if((result=mysql_store_result(&mysql))==NULL){fprintf(stderr,"存放數(shù)據(jù)失?。?s[%d]\n",mysql_error(&mysql),mysql_errno(&mysql));mysql_free_result(result);mysql_close(&mysql);exit(-4);};if((mysql_num_rows(result))==0){printf(”用戶不存在!\n");gotologin;}row=mysql_fetch_row(result);if(strcmp(row[1],user_p)!=0){printf(”密碼錯(cuò)誤\n");gotologin;}system("clear");printf("%s登陸成功\n",user);interface:system("clear");if((sp=getservbyname(argv[1],"tcp"))==NULL){fprintf(stderr,"端口號(hào)獲取錯(cuò)誤,請(qǐng)檢查第一個(gè)參數(shù),并確保在services文件里有該參數(shù),exit(-1);}if((hp=gethostbyname(argv[2]))==0){fprintf(stderr,呻間件地址獲取失敗,請(qǐng)檢查第二個(gè)參數(shù),并確保hosts文件里有對(duì)應(yīng)項(xiàng),exit(-2);}memset(&srv_addr,0,sizeof(srv_addr));srv_addr.sin_family=AF_INET;bcopy(hp->h_addr,&srv_addr.sin_addr,hp->h_length);srv_addr.sin_port=sp->s_port;connect_fd=socket(PF_INET,SOCK_STREAM,0);if(connect_fd<0){perror(-創(chuàng)建通信套接字失敗,');return1;}ret=connect(connect_fd,(structsockaddr*)&srv_addr,sizeof(srv_addr));if(ret==-1){perror("無法連接到服務(wù)器");close(connect_fd);return1;}printf(-=========歡迎您使用手機(jī)繳費(fèi)系統(tǒng)====\n");printf("1.給手機(jī)繳費(fèi)2.查詢銀行賬戶\n");printf("3.查詢手機(jī)余額4.退出系統(tǒng)n”);printf(-請(qǐng)選擇數(shù)字操作:");charchoice;scanf("%s”,&choice);switch(choice){case'1':printf("");printf("請(qǐng)輸入手機(jī)號(hào)碼\^,);scanf("%s”,phone);printf("請(qǐng)輸入銀行賬號(hào)\n");scanf("%s”,number);printf("請(qǐng)輸入銀行密碼");scanf("%s”,password);printf("請(qǐng)輸入繳費(fèi)金額”);scanf("%s”,money);memcpy(send_buf,"C”,2);memcpy(send_buf+2,phone,15);memcpy(send_buf+17,number,19);memcpy(send_buf+36,password,10);memcpy(send_buf+46,money,20);printf(”以下為充值信息:\n");printf("%s\n",send_buf);printf("手機(jī)號(hào)碼:%s\n",send_buf+2);printf("銀行賬戶%s\n",send_buf+17);printf("充值金額%s\n",send_buf+46);write(connect_fd,send_buf,1024);if(len=read(connect_fd,recive_buf,1024)>0){printf("收到數(shù)據(jù)\n");TOC\o"1-5"\h\zprintf("充值成功!!\n");printf("按回車鍵返回\n");strcat(log_buf,”給手機(jī)繳費(fèi)”);strcat(log_buf,"電話號(hào)碼:”);strcat(log_buf,phone);strcat(log_buf,"");strcat(log_buf,”銀行賬號(hào):");strcat(log_buf,number);strcat(log_buf,"");strcat(log_buf,"充值話費(fèi):");strcat(log_buf,money);log(log_file,log_buf);charstdinBuff[1024];fgets(stdinBuff,1024,stdin);getchar();gotointerface;}else{charstdinBuff[1024];fgets(stdinBuff,1024,stdin);printf("充值失敗AAAAAA%s\n",recive_buf+4);printf("按回車鍵返回\n");strcat(log_buf,"電話號(hào)碼:");strcat(log_buf,phone);strcat(log_buf,"賬戶不存在,充值失?。 ?;log(log_file,log_buf);getchar();gotointerface;}break;case'2':printf("");printf("請(qǐng)輸入銀行賬號(hào)\n");scanf("%s",number);printf("請(qǐng)輸入銀行密碼");scanf("%s",password);memcpy(send_buf,"A",2);memcpy(send_buf+2,"B",2);memcpy(send_buf+4,number,19);memcpy(send_buf+23,password,10);printf("以下為查詢信息:\n");printf("%s\n",send_buf);printf("銀行賬戶%s\n",send_buf+4);printf("密碼%s\n”,send_buf+23);write(connect_fd,send_buf,1024);printf("發(fā)送數(shù)據(jù)成功。。\n");if(len=read(connect_fd,recive_buf,1024)>0){printf("收到數(shù)據(jù)\n"

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論