2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p>  《軟件實(shí)習(xí)2》任務(wù)書</p><p>  設(shè)計(jì)題目 電費(fèi)代繳系統(tǒng) </p><p>  學(xué)生班級 </p><p>  學(xué)生學(xué)號 </p><p>  學(xué)生姓名 </p>

2、<p>  同 組 人 </p><p>  指導(dǎo)老師 </p><p><b>  目錄</b></p><p>  《軟件實(shí)習(xí)2》任務(wù)書- 0 -</p><p>  一: 前言- 2 -</

3、p><p>  二: 系統(tǒng)環(huán)境- 2 -</p><p>  三: 設(shè)計(jì)目的- 2 -</p><p>  四: 總體設(shè)計(jì)- 3 -</p><p>  1.客戶端頁面- 3 -</p><p>  2.客戶端,中間件和服務(wù)器聯(lián)系- 3 -</p><p>  五: 詳細(xì)設(shè)計(jì)- 4 -&

4、lt;/p><p> ?。?)基本功能- 4 -</p><p>  1.1查詢費(fèi)用- 4 -</p><p> ?。?) 服務(wù)器的開發(fā)- 4 -</p><p>  2.1服務(wù)端的開發(fā)- 4 -</p><p>  2.2 客戶端的開發(fā)- 5 -</p><p>  2.3套接字- 5

5、 -</p><p>  六: 調(diào)試與測試- 6 -</p><p>  一.生成數(shù)據(jù)庫(source *.sh)- 6 -</p><p>  二.程序的編譯和運(yùn)行- 6 -</p><p>  三.多任務(wù)模式與啟動(dòng)相關(guān)服務(wù)- 6 -</p><p>  四.相關(guān)操作- 7 -</p><

6、;p>  五.返回結(jié)果信息- 8 -</p><p>  七: 設(shè)計(jì)中遇到的問題及解決方法:- 9 -</p><p>  八: 源程序清單- 9 -</p><p>  8.1數(shù)據(jù)庫文件- 9 -</p><p>  8.2客戶端程序- 10 -</p><p>  8.3中間件程序- 16 -&l

7、t;/p><p>  8.4服務(wù)器- 22 -</p><p>  8.5服務(wù)器- 27 -</p><p>  九: 心得體會- 32 -</p><p>  十:參考文獻(xiàn)- 33 -</p><p><b>  電費(fèi)代繳系統(tǒng)</b></p><p><b>

8、;  一: 前言</b></p><p>  近年來,隨著高科技技術(shù)的告訴發(fā)展,傳統(tǒng)的手工操作系統(tǒng)為主的電費(fèi)繳納的管理方式,因其信息反應(yīng)慢,工作效率低,管理質(zhì)量差,備受廣大服務(wù)者爭議。在計(jì)算機(jī)信息技術(shù)飛速發(fā)展與廣泛應(yīng)用的今天,這種落后的管理方式與時(shí)代的步伐已顯得格格不入,對電費(fèi)繳納系統(tǒng)實(shí)現(xiàn)智能化,信息管理化,是信息時(shí)代對現(xiàn)代社會電費(fèi)管理工作提出的嚴(yán)峻要求。為了更好的提供電費(fèi)代繳服務(wù),為了使電費(fèi)管理更加

9、科學(xué),更嚴(yán)謹(jǐn),同時(shí)更具有操作性,節(jié)省操作人員的勞動(dòng),電費(fèi)繳納系統(tǒng)必須與先進(jìn)技術(shù)相結(jié)合,應(yīng)用先進(jìn)的網(wǎng)絡(luò)管理技術(shù)來操作電費(fèi)管理系統(tǒng),從而使其為人們提供更方便,更快捷的電費(fèi)管理服務(wù)。</p><p><b>  二: 系統(tǒng)環(huán)境</b></p><p>  在Linux環(huán)境下,使用GNU C或GNU C++,在UNIX/Linux make開發(fā)工具的的管理和控制下,利用UNI

10、X/Linux Socket庫在網(wǎng)絡(luò)的底層進(jìn)行開發(fā)設(shè)計(jì)。</p><p>  電費(fèi)繳費(fèi)系統(tǒng)是基于UNIX Socket和MySQL數(shù)據(jù)庫設(shè)計(jì)一個(gè)交易型中間件系統(tǒng)。在Linux環(huán)境下使用GNU C或者GNU C++,在Linux make開發(fā)工具的管理和控制下,利用Linux系統(tǒng)提供的Socket庫和MySQL數(shù)據(jù)庫在網(wǎng)絡(luò)底層開發(fā)交易型中間件,同時(shí)簡要介紹了客戶端和服務(wù)器的工作模式。此模擬電費(fèi)交費(fèi)系統(tǒng)采用“客戶端—

11、中間件—服務(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è)

12、務(wù)請求并做好留跡工作</p><p><b>  三: 設(shè)計(jì)目的</b></p><p>  對電費(fèi)查詢與繳費(fèi)業(yè)務(wù)進(jìn)行了系統(tǒng)全面的分析研究。針對現(xiàn)有系統(tǒng)中實(shí)時(shí)性不足而造成用戶欠費(fèi)太多使公司企業(yè)蒙受損失的問題。采用開發(fā)工具Linux+Mysql進(jìn)行系統(tǒng)設(shè)計(jì)。設(shè)計(jì)系統(tǒng)能夠提供對點(diǎn)費(fèi)信息輸入、查詢、編輯、打印以及話費(fèi)統(tǒng)計(jì)各明細(xì)項(xiàng)目的數(shù)據(jù)編輯,自動(dòng)計(jì)算出電費(fèi)的各項(xiàng)合計(jì)數(shù)據(jù);可

13、自主設(shè)定條件從而達(dá)到數(shù)據(jù)的多角度查詢功能;方便導(dǎo)入、導(dǎo)出數(shù)據(jù)及輸出報(bào)表。</p><p><b>  四: 總體設(shè)計(jì)</b></p><p><b>  1.客戶端頁面</b></p><p>  2.客戶端,中間件和服務(wù)器聯(lián)系</p><p><b>  五: 詳細(xì)設(shè)計(jì)</b>

14、;</p><p><b> ?。?)基本功能</b></p><p><b>  1.1查詢費(fèi)用 </b></p><p>  客戶到柜臺繳納費(fèi)用,客戶首先用賬號及密碼登陸系統(tǒng),然后登陸電表序列號和銀行賬號,中間件根據(jù)用戶提供的電表序列號碼把“查詢費(fèi)用”指令存入數(shù)據(jù)庫。中間件檢測到查詢費(fèi)用指令,把查詢費(fèi)用指令組成數(shù)據(jù)包發(fā)

15、送到服務(wù)器中。服務(wù)器把查詢費(fèi)用的結(jié)果返回中間件,確認(rèn)信息后,從接收表中檢測返回結(jié)果中間件,并監(jiān)控因錯(cuò)誤操作并返回結(jié)果。 服務(wù)器從接收表中查詢到“查詢費(fèi)用”指令,把查詢費(fèi)用指令填入數(shù)據(jù)庫.得到查詢費(fèi)用指令后從主數(shù)據(jù)庫查詢用戶的費(fèi)用信息。服務(wù)器如果因錯(cuò)誤沒有得到查詢結(jié)果,把返回結(jié)果系統(tǒng)錯(cuò)誤,并顯示出來。 1.2繳納費(fèi)用 </p><p>  客戶端發(fā)出“繳納費(fèi)用”指令存入中間件。中間件檢測到“繳納費(fèi)用”指令,把“繳

16、納費(fèi)用”指令組成數(shù)據(jù)包放入緩沖區(qū),然后發(fā)送給服務(wù)器。 服務(wù)器把“繳納費(fèi)用”的指令填入接收,并返回確認(rèn)信息。中間件在得到確認(rèn)信息后,從接收表中檢測返回結(jié)果給客戶端,并監(jiān)控錯(cuò)誤無返回結(jié)果的情況。 服務(wù)器從接收表中查詢到“繳納費(fèi)用”指令,把“繳納費(fèi)用”指令填入數(shù)據(jù)庫。得到“繳納費(fèi)用” 后從主數(shù)據(jù)庫進(jìn)行處理,并把銀行數(shù)據(jù)庫中所繳的費(fèi)用扣除,結(jié)果填入數(shù)據(jù)庫。 “服務(wù)器處理系統(tǒng)”如果因?yàn)殄e(cuò)誤沒有得到結(jié)果,把返回結(jié)果“系統(tǒng)錯(cuò)誤”填入發(fā)送錯(cuò)誤信息給中間

17、件,然后中間件把信息返回給用戶。 1.3 查詢信息</p><p>  通過用戶名和電表序列號進(jìn)行查詢,錄入正確則返回用戶信息,反之,退出系統(tǒng)。1.4 退出系統(tǒng)</p><p>  客戶端發(fā)送退出系統(tǒng)請求,經(jīng)中間件確認(rèn)。然后客戶端退出系統(tǒng)并關(guān)閉連接。</p><p> ?。?) 服務(wù)器的開發(fā)</p><p><b>  2.

18、1服務(wù)端的開發(fā)</b></p><p>  服務(wù)器主要包含守候進(jìn)程(daemon),也叫精靈進(jìn)程,或服務(wù)器進(jìn)程,是生存期長的一種進(jìn)程。它們常常在系統(tǒng)引導(dǎo)裝入時(shí)起動(dòng),在系統(tǒng)關(guān)閉時(shí)終止。因?yàn)樗鼈儧]有控制終端,所以說它們是在后臺運(yùn)行的。它等待客戶機(jī)與其聯(lián)系,提出某種類型的服務(wù)要求。服務(wù)對客戶機(jī)服務(wù)可將結(jié)果或信息返回給客戶機(jī)(雙向),也可不返回(單向)。</p><p>  2.2 客

19、戶端的開發(fā)</p><p>  打開一通信通道,并連接到服務(wù)器所在主機(jī)的特定端口。向服務(wù)器發(fā)服務(wù)請求,等待并接收應(yīng)答;請求結(jié)束后關(guān)閉通信通道。</p><p>  客戶是交易的發(fā)起者。實(shí)現(xiàn)功能與服務(wù)器方同。</p><p><b>  2.3套接字 </b></p><p>  1.流式套接字(SOCK-STREAM):

20、</p><p>  提供了一個(gè)面向連接、可靠的數(shù)據(jù)傳輸服務(wù),數(shù)據(jù)無差錯(cuò)、無重復(fù)地發(fā)送,且按發(fā)送順序接收。內(nèi)設(shè)流量控制,避免數(shù)據(jù)流超限;數(shù)據(jù)被看作是字節(jié)流,無長度限制。文件傳送協(xié)議(FTP)即使用流式套接字。</p><p>  數(shù)據(jù)報(bào)式套接字(SOCK-DGRAM) :提供了一個(gè)無連接服務(wù)。數(shù)據(jù)包以獨(dú)立包形式被發(fā)送,不提供無錯(cuò)保證,數(shù)據(jù)可能丟失或重復(fù),并且接收順序混亂。</p>

21、;<p>  原始式套接字(SOCK-RAW):該接口允許對較低層協(xié)議,如IP、ICMP直接訪問。常用于檢驗(yàn)新的協(xié)議實(shí)現(xiàn)或訪問現(xiàn)有服務(wù)中配置的新設(shè)備。</p><p>  基本套接字系統(tǒng)調(diào)用 </p><p>  創(chuàng)建套接字—socket() </p><p>  地址綁定—bind() </p><p>  建立連接—conn

22、ect()與accept()</p><p>  監(jiān)聽連接—listen() </p><p>  數(shù)據(jù)傳輸—send()/write()與recv()/read() </p><p>  關(guān)閉套接字—close() </p><p><b>  2.錯(cuò)誤處理</b></p><p>  利用函數(shù)

23、的返回值來判斷函數(shù)執(zhí)行是否正確。</p><p>  使用mysql提供的錯(cuò)誤號和錯(cuò)誤信息:</p><p><b>  錯(cuò)誤號:</b></p><p>  unsigned int mysql_errno(MYSQL *mysql)</p><p><b>  錯(cuò)誤信息:</b></p&g

24、t;<p>  char *mysql_error(MYSQL *mysql)</p><p><b>  六: 調(diào)試與測試</b></p><p>  一.生成數(shù)據(jù)庫(source *.sh)</p><p>  二.程序的編譯和運(yùn)行</p><p><b>  編譯:</b><

25、;/p><p>  cc –o client client.c -L/usr/lib/mysql –lmysqlclient;</p><p>  cc –o middle middle.c -L/usr/lib/mysql –lmysqlclient;</p><p>  cc –o bank bank.c -L/usr/lib/mysql –lmysqlclient

26、;</p><p>  cc –o meter meter.c -L/usr/lib/mysql –lmysqlclient;</p><p><b>  運(yùn)行:</b></p><p>  ./middle middle;</p><p>  ./meter Meter;</p><p>  .

27、/bank Bank;</p><p>  ./client middle myhttp;</p><p>  三.多任務(wù)模式與啟動(dòng)相關(guān)服務(wù)</p><p><b>  四.相關(guān)操作</b></p><p><b>  現(xiàn)金交易:</b></p><p><b> 

28、 網(wǎng)上交易:</b></p><p><b>  查詢:</b></p><p><b>  五.返回結(jié)果信息</b></p><p>  七: 設(shè)計(jì)中遇到的問題及解決方法:</p><p>  對Mysql 數(shù)據(jù)庫不夠了解,對很多數(shù)據(jù)結(jié)構(gòu)和算法也理解不夠牢固,因此我們參考了《Linux

29、+php+Mysql基礎(chǔ)與提高》這本書,學(xué)到一些關(guān)于Mysql的基礎(chǔ)知識,才使工作能順利的進(jìn)行下去。</p><p>  對套接字這樣的概念不是很清楚,在老師的輔導(dǎo)和互聯(lián)網(wǎng)的幫助下,了解了一些這方面的知識,才使我們的設(shè)計(jì)開展下來。</p><p>  以前對服務(wù)器,客戶端只是了解理論知識,這次而要自己動(dòng)手來開發(fā)服務(wù)器,這對我們來說,是一個(gè)巨大的挑戰(zhàn),服務(wù)器就是一個(gè)進(jìn)程,確切的說是一個(gè)守候進(jìn)

30、程,要實(shí)現(xiàn)它的功能,是不容易的事情,你要學(xué)會套接字,地址轉(zhuǎn)換,服務(wù)器相關(guān)的數(shù)據(jù)結(jié)構(gòu)和算法才能進(jìn)行開發(fā)和設(shè)計(jì)。</p><p>  還是很多基礎(chǔ)的東西沒有掌握好,基本的算法也沒有完全掌握,參考了教科書的相關(guān)內(nèi)容后,才開始了我們的課程設(shè)計(jì)。</p><p>  在數(shù)據(jù)庫的編寫時(shí),很多要用到的數(shù)據(jù)類型而我們又沒有學(xué)過的,只能借助互聯(lián)網(wǎng)的強(qiáng)大功能了,由此,我們也學(xué)到了很多相關(guān)的知識。</p&

31、gt;<p><b>  八: 源程序清單</b></p><p><b>  8.1數(shù)據(jù)庫文件</b></p><p><b>  BANK.SH</b></p><p>  drop database if exists bank;</p><p>  cre

32、ate database bank;</p><p><b>  use bank;</b></p><p>  create table information</p><p>  ( number char(19) not null,passwd char(10),name char(20),money float(10,10));<

33、/p><p>  insert into information(number,passwd,name,money)values("061407344","123456","zpf",1000);</p><p>  insert into information(number,passwd,name,money)values(&qu

34、ot;061407342","123456","zxl",1000);</p><p>  insert into information(number,passwd,name,money)values("061407340","123456","yxl",1000);</p><p&

35、gt;<b>  Meter.SH</b></p><p>  drop database if exists meter;</p><p>  create database meter;</p><p>  use meter;</p><p>  create table meter(number char(11)

36、,name char(30),money float(10,10));</p><p>  insert into meter(number,name,money)values("001","zpf",50);</p><p>  insert into meter(number,name,money)values("002",&

37、quot;zxl",22);</p><p>  insert into meter(number,name,money)values("003","yxl",20);</p><p><b>  MIDDLE.SH</b></p><p>  drop database if exists m

38、iddle;</p><p>  create database middle;</p><p>  use middle;</p><p>  create table information(service int,port char(20),ip char(20));</p><p>  insert into information

39、(service,port,ip)values(1,"Meter","myhttp");</p><p>  insert into information(service,port,ip)values(2,"Bank","myhttp");</p><p><b>  USERS.SH</b&

40、gt;</p><p>  drop database if exists users;</p><p>  create database users;</p><p>  use users;</p><p>  create table users(name char(20),passwd char(10));</p>&

41、lt;p>  insert into users(name,passwd)values("hello","world");</p><p><b>  8.2客戶端程序 </b></p><p><b>  Client.C</b></p><p>  #include <

42、;stdio.h></p><p>  #include <sys/types.h></p><p>  #include <sys/socket.h></p><p>  #include <netinet/in.h></p><p>  #include <sys/un.h></

43、p><p>  #include <netdb.h></p><p>  #include <unistd.h></p><p>  #include <mysql/mysql.h></p><p>  #include <fcntl.h></p><p>  #includ

44、e <termios.h></p><p>  #include <unistd.h></p><p>  #include <errno.h></p><p>  #define ECHOFLAGS (ECHO | ECHOE | ECHOK | ECHONL)</p><p>  int set_dis

45、p_mode(int option);</p><p>  int getpasswd(char* passwd, int size);</p><p>  int main(int argc,char *argv[])</p><p><b>  {</b></p><p>  char name[10],passwd

46、[10],choose;</p><p>  char send_buf[1024]="";</p><p>  char tmp[1024],meter[30],number[30],pswd[10],money[30],myl_buf[1024],fd_buf[1024];</p><p>  char log[]="clt.log

47、";</p><p>  int connect_fd;</p><p><b>  int ret;</b></p><p><b>  int i;</b></p><p><b>  int port;</b></p><p><b

48、>  int len;</b></p><p><b>  int fd;</b></p><p>  MYSQL mysql;</p><p>  MYSQL_ROW row;</p><p>  MYSQL_RES *result;</p><p>  struct serv

49、ent*sp;</p><p>  struct hostent*hp;</p><p>  static struct sockaddr_in srv_addr;</p><p>  if(mysql_init(&mysql)==NULL){</p><p>  fprintf(stderr,"Error in mys

50、ql_init!\n");</p><p><b>  exit(-1);</b></p><p><b>  }</b></p><p>  if(!mysql_real_connect(&mysql,"localhost","root",0,"user

51、s",0,NULL,0)){</p><p>  fprintf(stderr,"Error in connection: %s [%d]\n",mysql_error(&mysql),mysql_errno(&mysql));</p><p>  mysql_close(&mysql); exit(-2);</p>&l

52、t;p><b>  }</b></p><p>  system("clear");</p><p>  if((fd=open(log,O_WRONLY|O_CREAT|O_APPEND,0644))==-1){</p><p>  fprintf(stderr,"Log file %s open erro

53、r!\a\n",log);</p><p><b>  exit(-1);</b></p><p><b>  }</b></p><p><b>  clear:</b></p><p>  printf("Enter the user name:&quo

54、t;);</p><p>  scanf("%s",name);</p><p>  getchar();</p><p>  set_disp_mode(0);</p><p>  getpasswd(passwd,sizeof(passwd));</p><p>  set_disp_mode(

55、1);</p><p>  system("clear");</p><p>  sprintf(myl_buf,"select * from users where name=\"%s\"",name);</p><p>  if(mysql_query(&mysql,myl_buf)!=0){&

56、lt;/p><p>  fprintf(stderr,"Error in query: %s [%d]\n",mysql_error(&mysql),mysql_errno(&mysql));</p><p>  mysql_close(&mysql); exit(-3);</p><p><b>  }</b

57、></p><p>  if((result=mysql_store_result(&mysql))==NULL){</p><p>  fprintf(stderr,"Error in store_result: %s [%d]\n",mysql_error(&mysql),mysql_errno(&mysql));</p>

58、<p>  mysql_free_result(result);mysql_close(&mysql); exit(-4);</p><p><b>  };</b></p><p>  if((mysql_num_rows(result))==0){</p><p>  printf("use dont exis

59、t!\n");</p><p>  goto clear;</p><p><b>  }</b></p><p>  row=mysql_fetch_row(result);</p><p>  if(strcmp(row[1],passwd)!=0){</p><p>  print

60、f("The passwd is not ture\n");</p><p>  goto clear;</p><p><b>  }</b></p><p>  if((sp=getservbyname(argv[1],"tcp"))==NULL){</p><p>  fp

61、rintf(stderr,"Error:getservbyname");</p><p><b>  exit(-1);</b></p><p><b>  }</b></p><p>  if((hp=gethostbyname(argv[2]))==0){</p><p> 

62、 fprintf(stderr,"Error:gethostbyname");</p><p><b>  exit(-2);</b></p><p><b>  }</b></p><p>  memset(&srv_addr,0,sizeof(srv_addr));</p>&

63、lt;p>  srv_addr.sin_family=AF_INET;</p><p>  bcopy(hp->h_addr,&srv_addr.sin_addr,hp->h_length);</p><p>  srv_addr.sin_port=sp->s_port;</p><p><b>  clen:</b&

64、gt;</p><p>  connect_fd=socket(PF_INET,SOCK_STREAM,0);</p><p>  if(connect_fd<0){</p><p>  perror("cannot create communication socket");</p><p><b>  

65、return 1;</b></p><p><b>  }</b></p><p>  ret=connect(connect_fd,(struct sockaddr*)&srv_addr,sizeof(srv_addr));</p><p>  if(ret==-1){</p><p>  per

66、ror("cannot connect to the server");</p><p>  close(connect_fd);</p><p><b>  return 1;</b></p><p><b>  }</b></p><p>  system("cle

67、ar");</p><p>  printf("%s login sucessfully\n",name);</p><p>  printf("1.cash 2.online\n");</p><p>  printf("3.search4.exit\n");</p>&

68、lt;p>  printf("Please choose your option :");</p><p>  scanf("%c",&choose);</p><p>  switch(choose){</p><p><b>  case '1':</b></p&g

69、t;<p>  printf("Please input your meter number: ");</p><p>  scanf("%s",meter);</p><p>  printf("Please input the money you want to submit:");</p><

70、;p>  scanf("%s",money);</p><p>  getchar();</p><p>  strcat(send_buf,"3|");strcat(send_buf,meter);strcat(send_buf,"|");</p><p>  strcat(send_buf,mon

71、ey);strcat(send_buf,"|1|");</p><p>  printf("%s \n",send_buf);</p><p><b>  break;</b></p><p><b>  case '2':</b></p><p&

72、gt;  printf("Please input your meter number:");</p><p>  scanf("%s",meter);</p><p>  printf("Please input your bank number:");</p><p>  scanf("%s&

73、quot;,number);</p><p>  getchar();</p><p>  set_disp_mode(0);</p><p>  getpasswd(pswd,sizeof(pswd));</p><p>  set_disp_mode(1);</p><p>  printf("\n&qu

74、ot;);</p><p>  printf("Please input the money you want to submit:");</p><p>  scanf("%s",money);</p><p>  getchar();</p><p>  strcat(send_buf,"

75、1|");strcat(send_buf,number);strcat(send_buf,"|");</p><p>  strcat(send_buf,pswd);strcat(send_buf,"|");</p><p>  strcat(send_buf,money);strcat(send_buf,"|");

76、</p><p>  strcat(send_buf,meter);strcat(send_buf,"|");</p><p>  strcat(send_buf,"2|");</p><p>  printf("%s \n",send_buf);</p><p><b&g

77、t;  break;</b></p><p>  case '3':</p><p>  printf("Please Enter your meter number:");</p><p>  scanf("%s",meter);</p><p>  getchar();

78、</p><p>  strcat(send_buf,"4|");strcat(send_buf,meter);</p><p>  strcat(send_buf,"|1|");</p><p><b>  break;</b></p><p>  case '4'

79、;:</p><p>  strcpy(send_buf,"3|");</p><p><b>  break;</b></p><p>  default: ;</p><p><b>  }</b></p><p>  write(connect_f

80、d,send_buf,strlen(send_buf)+1);</p><p>  len=read(connect_fd,send_buf,1024);</p><p><b>  if(len>0)</b></p><p>  printf("Message from middle: %s\n",send_buf)

81、;</p><p>  close(connect_fd);</p><p>  switch(send_buf[0]){</p><p><b>  case '0':</b></p><p>  sprintf(fd_buf,"%-10s%-20s%-20s[0k]\n",name

82、,meter,money);</p><p>  write(fd,fd_buf,strlen(fd_buf));</p><p>  printf("OPTION SUCCESSFULLY\n");</p><p>  printf("Please Enter any key to return...\n");</p&

83、gt;<p>  getchar();</p><p>  strcpy(send_buf,"");</p><p>  goto clen;</p><p><b>  break;</b></p><p><b>  case '1':</b>&

84、lt;/p><p>  printf("the information of the is %s\n",send_buf);</p><p>  printf("Please Entry any key to continue...\n");</p><p>  getchar();goto clen;</p>&l

85、t;p><b>  break;</b></p><p><b>  case '3':</b></p><p>  sprintf(fd_buf,"%s LOG OUT SUCESSFULLY",meter);</p><p>  write(fd,fd_buf,strlen(f

86、d_buf));</p><p>  printf("SUCCESSFULLY LOGOUT!\n");</p><p><b>  break;</b></p><p><b>  case '5':</b></p><p>  sprintf(fd_buf,&

87、quot;%-10s%-20s%-20s[FALSE]BANK NUMBER WRONG!\n",name,meter,money);</p><p>  write(fd,fd_buf,strlen(fd_buf));</p><p>  printf("THE BANK NUMBER IS NOT EXIST\n");</p><p&

88、gt;  printf("Please Check it\n");</p><p>  printf("please Enter any key to continue...\n");</p><p>  getchar();</p><p>  strcpy(send_buf,"");goto clen;

89、</p><p><b>  case '8':</b></p><p>  sprintf(fd_buf,"%-10s%-20s%-20s[FALSE]PHONE NUMBER WRONG!\n",name,meter,money);</p><p>  write(fd,fd_buf,strlen(f

90、d_buf));</p><p>  printf("THE METER USER ISN'T EXIST\n");</p><p>  printf("Please Check it\n");</p><p>  printf("Please Enter any key to continue...\n&q

91、uot;);</p><p>  getchar();</p><p>  strcpy(send_buf,"");goto clen;</p><p><b>  break;</b></p><p><b>  case '9':</b></p>

92、<p>  sprintf(fd_buf,"%-10s%-20s%-20s[FALSE]BANK PASSWD WRONG!\n",name,meter,money);</p><p>  write(fd,fd_buf,strlen(fd_buf));</p><p>  printf("The passwd wrong\n");&l

93、t;/p><p>  printf("Please Enter any key to continue...\n");</p><p>  getchar();</p><p>  strcpy(send_buf,"");goto clen;</p><p><b>  case '7&#

94、39;:</b></p><p>  sprintf(fd_buf,"%-10s%-20s%-20s[FALSE]NOT ENOUGH!\n",name,meter,money);</p><p>  write(fd,fd_buf,strlen(fd_buf));</p><p>  printf("NOt Enough

95、 MOney\n");</p><p>  printf("Please Enter any key to continue...\n");</p><p>  getchar();</p><p>  strcpy(send_buf,"");goto clen;</p><p>  defa

96、ult:break;</p><p><b>  }</b></p><p>  close(connect_fd);</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  int set

97、_disp_mode(int option)</p><p><b>  {</b></p><p><b>  int err;</b></p><p>  struct termios term;</p><p>  if(tcgetattr(STDIN_FILENO,&term)==-

98、1){</p><p>  perror("Cannot get the attribution of the terminal");</p><p><b>  return 1;</b></p><p><b>  }</b></p><p>  if(option)<

99、/p><p>  term.c_lflag|=ECHOFLAGS;</p><p><b>  else</b></p><p>  term.c_lflag &=~ECHOFLAGS;</p><p>  err=tcsetattr(STDIN_FILENO,TCSAFLUSH,&term);</p&

100、gt;<p>  if(err==-1 && err==EINTR){</p><p>  perror("Cannot set the attribution of the terminal");</p><p><b>  return 1;</b></p><p><b>  }

101、</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  int getpasswd(char* passwd, int size)</p><p><b>  {</b></p>&

102、lt;p><b>  int c;</b></p><p>  int n = 0;</p><p>  printf("Enter the passwd:");</p><p><b>  do{</b></p><p>  c=getchar();</p>

103、<p>  // if (c != '\n'|c!='\r'){</p><p>  passwd[n++] = c;</p><p><b>  // }</b></p><p>  }while(c != '\n' && c !='\r'

104、&& n < (size - 1));</p><p>  passwd[n-1] = '\0';</p><p><b>  return n;</b></p><p><b>  }</b></p><p><b>  8.3中間件程序</b

105、></p><p><b>  MIDDLE.C</b></p><p>  #include <stdio.h></p><p>  #include <sys/types.h></p><p>  #include <sys/socket.h></p><

106、p>  #include <sys/un.h></p><p>  #include <errno.h></p><p>  #include <unistd.h></p><p>  #include <netinet/in.h></p><p>  #include <signa

107、l.h></p><p>  #include <sys/wait.h></p><p>  #include <netdb.h></p><p>  #include <string.h></p><p>  #include <mysql/mysql.h></p><

108、;p>  #include <fcntl.h></p><p>  void strsplit(char *s,char **v,char d);</p><p>  int main(int argc,char *argv[])</p><p><b>  {</b></p><p>  int li

109、sten_fd,clt_fd,ser_fd;</p><p>  int com_fd;</p><p><b>  int ret;</b></p><p><b>  int i;</b></p><p><b>  int port;</b></p><

110、;p><b>  int stat;</b></p><p>  pid_t pid;</p><p>  char flag,fflag;</p><p>  static char recv_buf[1024],snd_buf[1024],buf[1024],ret_buf[1024]="",fd_buf[1024

111、]="";</p><p><b>  int len;</b></p><p>  char **v,**x,d='|';</p><p><b>  int fd;</b></p><p>  char log[]="mid.log";&l

112、t;/p><p>  MYSQLmysql;</p><p>  MYSQL_RES*result;</p><p>  MYSQL_ROWrow;</p><p>  struct hostent*hp;</p><p>  struct servent*sp;</p><p>  st

113、ruct sockaddr_in srv_addr;</p><p>  struct sockaddr_in clt_addr;</p><p>  struct sockaddr_in sc_addr;</p><p>  if((fd=open(log,O_WRONLY|O_CREAT|O_APPEND,0644))==-1){</p><

114、p>  fprintf(stderr,"Log file %s open error!\a\n",log);</p><p><b>  exit(-1);</b></p><p><b>  }</b></p><p>  if(mysql_init(&mysql)==NULL){<

115、;/p><p>  fprintf(stderr,"Error in mysql_init!\n");</p><p><b>  exit(-1);</b></p><p><b>  }</b></p><p>  if(!mysql_real_connect(&mysq

116、l,"localhost","root",0,"middle",0,NULL,0)){</p><p>  fprintf(stderr,"Error in connection: %s [%d]\n",mysql_error(&mysql),mysql_errno(&mysql));</p><p

117、>  mysql_close(&mysql); exit(-2);</p><p><b>  }</b></p><p>  listen_fd=socket(PF_INET,SOCK_STREAM,0);</p><p>  if(listen_fd<0){</p><p>  perror(&q

118、uot;cannot create listening socket");</p><p><b>  return 1;</b></p><p><b>  }</b></p><p>  if((sp=getservbyname(argv[1],"tcp"))==NULL){</p&

119、gt;<p>  fprintf(stderr,"Error:getservbyname");</p><p><b>  exit(-1);</b></p><p><b>  }</b></p><p>  memset(&srv_addr,0,sizeof(srv_addr)

120、);</p><p>  srv_addr.sin_family=AF_INET;</p><p>  srv_addr.sin_addr.s_addr=htonl(INADDR_ANY);</p><p>  srv_addr.sin_port=sp->s_port;</p><p>  ret=bind(listen_fd,(str

121、uct sockaddr*)&srv_addr,sizeof(srv_addr));</p><p>  if(ret==-1){</p><p>  perror("cannot bind server socket");</p><p>  close(listen_fd);</p><p><b>

122、  return 1;</b></p><p><b>  }</b></p><p>  ret=listen(listen_fd,10);</p><p>  if(ret==-1){</p><p>  perror("cannot listen the client connect requ

123、est");</p><p>  close(listen_fd);</p><p><b>  return 1;</b></p><p><b>  }</b></p><p><b>  while(1){</b></p><p>  f

124、lag='F',fflag='T';</p><p>  len=sizeof(clt_addr);</p><p>  com_fd=accept(listen_fd,(struct sockaddr*)&clt_addr,&len);</p><p>  if(com_fd<0){</p>&l

125、t;p>  perror("cannot accept client connect request");</p><p>  close(listen_fd);</p><p><b>  return 1;</b></p><p><b>  }</b></p><p>

126、;  if((pid=fork())==-1){</p><p>  printf("can't create son proce!\n");</p><p>  close(com_fd);</p><p>  close(listen_fd);</p><p><b>  return 2;</

127、b></p><p><b>  }</b></p><p>  if(pid==0){</p><p>  close(listen_fd);</p><p>  if((len=read(com_fd,recv_buf,1024))>0){</p><p>  sprintf(fd

128、_buf,"MESSAGE FROM CLIENT:%-40s\n",recv_buf);</p><p>  write(fd,fd_buf,strlen(fd_buf)+1);</p><p>  printf("Message from client(%d): %s\n",len,recv_buf);</p><p&

129、gt;<b>  }</b></p><p>  if(recv_buf[len-3]=='3'){</p><p>  strcpy(snd_buf,"3|");</p><p>  goto zhongjr;</p><p><b>  }</b></p

130、><p><b>  clen:</b></p><p>  len=strlen(recv_buf);</p><p>  printf("recv%s\n",recv_buf);</p><p>  printf("%d!!!!!!\n",recv_buf[len-2]-48);

131、</p><p>  sprintf(buf,"select * from information where service=%d",(recv_buf[len-2]-48));</p><p>  if(mysql_query(&mysql,buf)!=0){</p><p>  fprintf(stderr,"Error

132、in query: %s [%d]\n",mysql_error(&mysql),mysql_errno(&mysql));</p><p>  mysql_close(&mysql); exit(-3);</p><p><b>  }</b></p><p>  if((result=mysql_store

133、_result(&mysql))==NULL){</p><p>  fprintf(stderr,"Error in store_result: %s [%d]\n",mysql_error(&mysql),mysql_errno(&mysql));</p><p>  mysql_free_result(result);mysql_close

134、(&mysql); exit(-4);</p><p><b>  }</b></p><p>  row=mysql_fetch_row(result);</p><p>  if((sp=getservbyname(row[1],"tcp"))==NULL){</p><p>  fpri

135、ntf(stderr,"Error:getservbyname");</p><p><b>  exit(-3);</b></p><p><b>  }</b></p><p>  if((hp=gethostbyname(row[2]))==0){</p><p>  fp

136、rintf(stderr,"Error:gethostbyname");</p><p><b>  exit(-4);</b></p><p><b>  }</b></p><p>  clt_fd=socket(PF_INET,SOCK_STREAM,0);</p><p>

溫馨提示

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

評論

0/150

提交評論