手機繳費系統(tǒng)linux課程設計_第1頁
已閱讀1頁,還剩41頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  附件1:封面</b></p><p>  《Linux課程設計》</p><p><b>  報 告</b></p><p>  設計題目: 手機交費系統(tǒng) </p><p>  專 業(yè): 軟件工程 </p>

2、<p>  2015年06月26日</p><p><b>  目錄</b></p><p><b>  一、需求分析2</b></p><p><b>  1.功能介紹2</b></p><p><b>  2.目的及意義3</b><

3、;/p><p><b>  2.1.目的3</b></p><p><b>  2.2.意義3</b></p><p><b>  二、總體設計3</b></p><p><b>  1.功能介紹3</b></p><p>&l

4、t;b>  2.模塊關聯(lián)4</b></p><p><b>  三、詳細設計6</b></p><p><b>  1.結構說明6</b></p><p>  2.功能的關鍵代碼9</p><p>  四、測試及運行結果36</p><p><

5、;b>  1.調試36</b></p><p><b>  2.運行結果36</b></p><p>  五、 測試總結40</p><p><b>  一、需求分析</b></p><p><b>  1.功能介紹</b></p><

6、;p>  這個設計實現(xiàn)了手機繳費功能,分別是通過管理員操作和用戶自主網(wǎng)上操作,功能</p><p>  包括可以查看手機余額,以及銀行卡交費和銀行卡余額查詢等功能</p><p><b>  2.目的及意義</b></p><p><b>  2.1.目的</b></p><p>  基于UN

7、IX Socket和MySQL數(shù)據(jù)庫,設計一個交易型中間件系統(tǒng)。</p><p>  這里的中間件是指交易型中間件。交易型中間件是指用在不同行業(yè)、不同部門間的通訊轉發(fā)和協(xié)議轉換的軟件,在不同的行業(yè)、不同的系統(tǒng)間提供通訊轉發(fā)和協(xié)議轉換的橋梁作用。例如電子商務、銀行代理業(yè)務軟件等都是這種類型的軟件。本設計不是基于WEB的,不需要很多與WEB開發(fā)相關的知識,主要是利用linux系統(tǒng)提供的Socket庫在網(wǎng)絡底層,開發(fā)交

8、易型中間件。</p><p>  模擬手機繳費系統(tǒng),通過對移動通信話費查詢與繳費業(yè)務進行了系統(tǒng)全面的分析研究。針對現(xiàn)有系統(tǒng)中實時性不足而造成用戶欠費太多使公司企業(yè)蒙受損失的問題。采用開發(fā)工具Linux進行系統(tǒng)設計?;趌inux Socket和mysql數(shù)據(jù)庫,設計一個交易型中間件系統(tǒng)。提供通訊轉發(fā)和協(xié)議轉換的橋梁作用。例如電子商務、銀行代理業(yè)務軟件等都是這種類型軟件。這里的中間件是指交易型中間件。交易型中間件是

9、指用在不同行業(yè)、不同部門間的通訊轉發(fā)和協(xié)議轉換的軟件,在不同的行業(yè)、不同的系統(tǒng)間。這里主要是利用linux系統(tǒng)提供的Socket庫在網(wǎng)絡底層,開發(fā)交易型中間件。</p><p>  本次設計要求實現(xiàn)對移動話費信息輸入、查詢、編輯以及話費統(tǒng)計各明細項目的數(shù)據(jù)編輯;可自主設定條件從而達到對話費數(shù)據(jù)的多角度查詢功能;方便導入、導出數(shù)據(jù)及輸出報表</p><p><b>  2.2.意義

10、</b></p><p>  本次設計實現(xiàn)了管理員操作交費和用戶通過網(wǎng)絡銀行交費等功能,實現(xiàn)了這個系統(tǒng),對于Linux下的c編程了解了不少,學到了很多知識。Linux操作系統(tǒng)對于編程人員來說要比Windows操作系統(tǒng)功能要強大的多,Linux是一套免費使用和自由傳播的類Unix操作系統(tǒng),是一個基于POSIX和UNIX的多用戶、多任務、支持多線程和多CPU的操作系統(tǒng)。它能運行主要的UNIX工具軟件、應用

11、程序和網(wǎng)絡協(xié)議。它支持32位和64位硬件。Linux繼承了Unix以網(wǎng)絡為核心的設計思想,是一個性能穩(wěn)定的多用戶網(wǎng)絡操作系統(tǒng)。</p><p><b>  二、總體設計</b></p><p><b>  1.功能介紹</b></p><p><b>  系統(tǒng)模型:</b></p>&l

12、t;p>  這個程序是模擬手機交費系統(tǒng),所以運行時服務器一直處于工作狀態(tài),等待來自中間件發(fā)過來的服務或數(shù)據(jù)。而中間件只有在客戶端傳來數(shù)據(jù)或者要求服務時才處于運行狀態(tài)。C/S應用程序中復制尋找數(shù)據(jù)的步伐只需要訪問一個中間件系統(tǒng),由中間件完成網(wǎng)絡中獲得的數(shù)據(jù)源或服務,進行事先傳輸客戶請求,重組回復信息,最后將結果送回應用程序的任務。</p><p><b>  2.模塊關聯(lián)</b><

13、/p><p><b>  流程圖:</b></p><p><b>  系統(tǒng)流程圖:</b></p><p><b>  三、詳細設計</b></p><p><b>  1.結構說明</b></p><p><b>  數(shù)據(jù)

14、庫:</b></p><p><b>  2.功能的關鍵代碼</b></p><p><b>  client:</b></p><p>  #include <stdio.h></p><p>  #include <stdlib.h></p>&

15、lt;p>  #include <sys/types.h></p><p>  #include <sys/socket.h></p><p>  #include <netinet/in.h></p><p>  #include <sys/un.h></p><p>  #includ

16、e <netdb.h></p><p>  #include <unistd.h></p><p>  #include <fcntl.h></p><p>  #include <termios.h></p><p>  #include <unistd.h></p>

17、<p>  #include <errno.h></p><p>  #include <time.h></p><p>  #define rec_length50</p><p>  #define ECHOFLAGS (ECHO | ECHOE | ECHOK | ECHONL)</p><p> 

18、 void strsplit(char *sourceStr,char **v,char d);//字符串拆分函數(shù),拆分傳遞的信息</p><p>  int getpasswd(char* passwd, int size);</p><p>  int set_disp_mode(int fd,int option);//用于控制是否開啟輸入回顯功能 </p><p

19、>  void gettime(char datafull[]);</p><p>  main(int argc,char **argv)</p><p><b>  {</b></p><p>  structhostent *hp;</p><p>  structsockaddr_in sin;<

20、/p><p>  structservent *sp;</p><p>  char connbuf[80],buf[80],oprname[20],usrname[20],bankno[20],bankpwd[20],num[20],deposite[30];</p><p>  char quebuf[80],readbuf[80],queoprpwd[20],q

21、ueusrpwd[20];</p><p>  char oprpwd[20],usrpwd[20];</p><p>  char phoneno[12],testStr[10],tmp[10];</p><p>  int s,pid;</p><p>  char money[10],nowtime[30],logbuf[100],l

22、ogbuf1[100],logbuf2[20];</p><p>  int k=1,t=1,m=1,n=1,q=1,r=1,w=1,z=1;</p><p>  char *service,*dest;</p><p>  char option,chose,ch[5];</p><p>  char d='-',**v=(

23、char**)malloc(sizeof(char*) * 10);</p><p>  static int wf;</p><p>  if(argc==3){ </p><p>  service=argv[1];</p><p>  dest=argv[2];</p><p><b>  }</

24、b></p><p><b>  else {</b></p><p>  fprintf(stderr,"NO service assigned!\nUsage:");</p><p>  fprintf(stderr,"%s service_name destination!\n",argv[0

25、]);</p><p>  fprintf(stderr,"Note: service_name is defined in /etc/services\n");</p><p>  fprintf(stderr," destination is defined in /etc/hosts\n");</p><p>

26、<b>  exit(-1);</b></p><p><b>  }</b></p><p>  if((wf=open("client.log",O_WRONLY|O_SYNC|O_CREAT|O_APPEND,0644))==-1)</p><p><b>  {</b>&l

27、t;/p><p>  printf("Log file 'client' open error!\a\n");</p><p><b>  exit(-1);</b></p><p><b>  }</b></p><p><b>  while(k)<

28、;/b></p><p><b>  {</b></p><p>  k=1,t=1,m=1,n=1,q=1,r=1,w=1,z=1;</p><p>  system("clear");</p><p>  printf("\t*******************話費服務----充

29、值交費*****************\n");</p><p>  printf("\t\t1.現(xiàn)金交費\t\t\t2.個人網(wǎng)上服務\n\t\t3.退出\n");</p><p>  printf("請選擇您的操作(1或2或3):");</p><p>  setbuf(stdin,NULL);</p>

30、;<p><b>  do{</b></p><p>  option=getchar();</p><p>  }while(option=='\n'|| option=='\r');</p><p>  setbuf(stdin,NULL);</p><p>  swit

31、ch(option)</p><p><b>  {</b></p><p>  case '1':</p><p><b>  while(t)</b></p><p>  {system("clear");</p><p>

32、;  printf("\t\t*******************話費服務----現(xiàn)金交費******************\n");</p><p>  printf("請您(操作員)登錄?。ㄝ斎?#39;exit'返回上一級)\n\n");</p><p>  printf("請輸入用戶名(或exit):");&l

33、t;/p><p>  scanf("%s",&oprname);</p><p>  setbuf(stdin,NULL);</p><p>  if(strcmp(oprname,"exit")==0)</p><p><b>  {</b></p><p

34、><b>  m=0;</b></p><p><b>  break;</b></p><p><b>  }</b></p><p>  setbuf(stdin,NULL);</p><p>  set_disp_mode(STDIN_FILENO,0);&

35、lt;/p><p>  //調用getpasswd函數(shù)獲得用戶輸入的密碼</p><p>  getpasswd(oprpwd, sizeof(oprpwd));</p><p>  printf("%s password is %s",oprname,oprpwd);</p><p>  getchar();</p&g

36、t;<p>  set_disp_mode(STDIN_FILENO,1);</p><p>  setbuf(stdin,NULL);</p><p>  if((sp=getservbyname(service,"tcp"))==NULL){</p><p>  fprintf(stderr,"與服務器會話時出錯(ge

37、tservbyname)!\n");</p><p><b>  exit(-1);</b></p><p><b>  }</b></p><p>  if((hp=gethostbyname(dest))==0){</p><p>  fprintf(stderr,"與接服務

38、器會話時出錯(gethostbyname)!\n");</p><p><b>  exit(-1);</b></p><p><b>  }</b></p><p>  bzero(&sin,sizeof(sin));</p><p>  bcopy(hp->h_addr,

39、&sin.sin_addr,hp->h_length);</p><p>  sin.sin_family=hp->h_addrtype;</p><p>  sin.sin_port=sp->s_port;</p><p>  if((s=socket(AF_INET,SOCK_STREAM,0))==-1){</p>&l

40、t;p>  fprintf(stderr,"與服務器會話時出錯(socket)!\n");</p><p><b>  exit(-1);</b></p><p><b>  }</b></p><p>  if(connect(s,(struct sockaddr*)&sin,sizeo

41、f(sin))==-1){</p><p>  fprintf(stderr,"與服務器會話時出錯(connect)!\n");</p><p><b>  close(s);</b></p><p><b>  exit(-1);</b></p><p><b>  

42、}</b></p><p>  sprintf(buf,"phoneSer-0-%s-%s",oprname,oprpwd);</p><p>  if(write(s,buf,rec_length)!=rec_length){ //to server</p><p>  fprintf(stderr,"Write Sock

43、et s ERROR!\n");</p><p>  fprintf(stderr,"請按任意鍵返回!\n");</p><p>  getchar();</p><p>  close(s); </p><p><b>  exit(-1);</b></p><p>

44、;<b>  }</b></p><p>  if(read(s,buf,rec_length)==0){ //get replay from server</p><p>  fprintf(stderr,"Read Socket s Error!\n");</p><p>  fprintf(stderr,"請

45、按任意鍵返回!\n");</p><p>  getchar();</p><p><b>  close(s);</b></p><p><b>  exit(-1);</b></p><p><b>  }</b></p><p>  if

46、(strcmp(buf,"OK")!=0)</p><p><b>  {</b></p><p>  printf("用戶名不存在或密碼錯誤!請按任意鍵重新輸入。\n");</p><p><b>  close(s);</b></p><p>  getc

47、har();</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p><b>  t=0;</b></p><p><b>  clos

48、e(s);</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  while(m)</b></p><p><b>  {</b></p><p>  sys

49、tem("clear"); </p><p>  printf("\t\t***************話費服務----現(xiàn)金交費**************\n");</p><p>  printf("登錄成功!操作員:%s。\t(輸入'exit'返回主菜單)\n\n",oprname);</p>

50、<p>  printf("請輸入手機號碼:");</p><p>  scanf("%s",&phoneno);</p><p>  setbuf(stdin,NULL);</p><p>  if(strcmp(phoneno,"exit")==0)</p><

51、p><b>  break;</b></p><p>  if((sp=getservbyname(service,"tcp"))==NULL){</p><p>  fprintf(stderr,"與服務器會話時出錯(getservbyname)!\n");</p><p><b>  

52、exit(-1);</b></p><p><b>  }</b></p><p>  if((hp=gethostbyname(dest))==0){</p><p>  fprintf(stderr,"與接服務器會話時出錯(gethostbyname)!\n");</p><p>&l

53、t;b>  exit(-1);</b></p><p><b>  }</b></p><p>  bzero(&sin,sizeof(sin));</p><p>  bcopy(hp->h_addr,&sin.sin_addr,hp->h_length);</p><p>

54、;  sin.sin_family=hp->h_addrtype;</p><p>  sin.sin_port=sp->s_port;</p><p>  if((s=socket(AF_INET,SOCK_STREAM,0))==-1){</p><p>  fprintf(stderr,"與服務器會話時出錯(socket)!\n"

55、;);</p><p><b>  exit(-1);</b></p><p><b>  }</b></p><p>  if(connect(s,(struct sockaddr*)&sin,sizeof(sin))==-1){</p><p>  fprintf(stderr,&quo

56、t;與服務器會話時出錯(connect)!\n");</p><p><b>  close(s);</b></p><p><b>  exit(-1);</b></p><p><b>  }</b></p><p>  sprintf(buf,"pho

57、neSer-1-%s",phoneno);</p><p>  if(write(s,buf,rec_length)!=rec_length){ //to server</p><p>  fprintf(stderr,"Write Socket s ERROR!\n");</p><p>  fprintf(stderr,"

58、請按任意鍵返回!\n");</p><p>  getchar();</p><p>  close(s); </p><p><b>  exit(-1);</b></p><p><b>  }</b></p><p>  if(read(s,buf,rec_l

59、ength)==0){ //get replay from server</p><p>  fprintf(stderr,"Read Socket s Error!\n");</p><p>  fprintf(stderr,"請按任意鍵返回!\n");</p><p>  getchar();</p><

60、;p><b>  close(s);</b></p><p><b>  exit(-1);</b></p><p><b>  }</b></p><p>  strsplit(buf,v,d);</p><p>  if(strcmp(v[0],"OK&qu

61、ot;)!=0)</p><p><b>  {</b></p><p>  printf("手機號碼不存在或輸入錯誤!請按任意鍵重新輸入。\n");</p><p><b>  close(s);</b></p><p>  getchar();</p><

62、p>  getchar();</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p><b>  close(s);</b></p><p>

63、;<b>  while(r)</b></p><p><b>  {</b></p><p>  printf("機主:%s\t余額:%-10.2f\n",v[1],atof(v[2]));</p><p>  printf("要繼續(xù)操作嗎?(y|n):");</p>

64、<p>  setbuf(stdin,NULL);</p><p>  scanf("%s",ch);</p><p>  setbuf(stdin,NULL);</p><p>  if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)</p><

65、p><b>  {</b></p><p>  printf("請輸入交費金額:");</p><p>  scanf("%s",&money);</p><p>  setbuf(stdin,NULL);</p><p>  if((sp=getservbyname

66、(service,"tcp"))==NULL){</p><p>  fprintf(stderr,"與服務器會話時出錯(getservbyname)!\n");</p><p><b>  exit(-1);</b></p><p><b>  }</b></p>&

67、lt;p>  if((hp=gethostbyname(dest))==0){</p><p>  fprintf(stderr,"與接服務器會話時出錯(gethostbyname)!\n");</p><p><b>  exit(-1);</b></p><p><b>  }</b><

68、/p><p>  bzero(&sin,sizeof(sin));</p><p>  bcopy(hp->h_addr,&sin.sin_addr,hp->h_length);</p><p>  sin.sin_family=hp->h_addrtype;</p><p>  sin.sin_port=sp-

69、>s_port;</p><p>  if((s=socket(AF_INET,SOCK_STREAM,0))==-1){</p><p>  fprintf(stderr,"與服務器會話時出錯(socket)!\n");</p><p><b>  exit(-1);</b></p><p>

70、<b>  }</b></p><p>  if(connect(s,(struct sockaddr*)&sin,sizeof(sin))==-1){</p><p>  fprintf(stderr,"與服務器會話時出錯(connect)!\n");</p><p><b>  close(s);<

71、;/b></p><p><b>  exit(-1);</b></p><p><b>  }</b></p><p>  sprintf(connbuf,"phoneSer-2-%s-%s-%s",phoneno,money,oprname);</p><p>  if

72、(write(s,connbuf,rec_length)!=rec_length){ </p><p>  fprintf(stderr,"Write Socket s ERROR!\n");</p><p>  fprintf(stderr,"請按任意鍵返回!\n");</p><p>  getchar();</p&

73、gt;<p>  close(s); </p><p><b>  break;</b></p><p><b>  }</b></p><p>  if(read(s,connbuf,rec_length)==0){ </p><p>  fprintf(stderr,"R

74、ead Socket s Error\n");</p><p>  fprintf(stderr,"請按任意鍵返回!\n");</p><p>  getchar();</p><p><b>  close(s);</b></p><p>  break; </p&

75、gt;<p>  }</p><p><b>  close(s);</b></p><p>  if(strcmp(connbuf,"OK")==0)</p><p><b>  {</b></p><p>  gettim

76、e(nowtime);</p><p>  sprintf(logbuf,"[%s] 給%s[繳費成功],充值金額為:%s ",nowtime,phoneno,money); </p><p>  write(wf,logbuf,strlen(logbuf));</p><p>  write(wf,"\n",

77、strlen("\n"));</p><p>  printf("交費成功!\n\n");</p><p>  gettime(nowtime);</p><p>  printf("手機交費回執(zhí)單:\n");</p><p>  printf("-------------

78、-----------------------------------------------------\n");</p><p>  printf("機主:%s 號碼:%s 金額:%-10.2f 操作員:%s\n日期:%s\n",v[1],phoneno,atof(money),oprname,nowtime);</p><p>  p

79、rintf("------------------------------------------------------------------\n");</p><p>  printf("\n請按任意鍵繼續(xù)!");</p><p><b>  m=0;</b></p><p>  getchar()

80、;</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  printf("交費失

81、敗!\n");</p><p>  scanf("%s",tmp);</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  el

82、se if(strcmp(ch,"n")==0||strcmp(ch,"N")==0)</p><p><b>  break;</b></p><p><b>  else</b></p><p><b>  {</b></p><p>

83、;  printf("輸入錯誤!請按任意鍵重新輸入(y或n)。\n");</p><p>  getchar();</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p>

84、<p><b>  }</b></p><p><b>  close(s);</b></p><p><b>  break;</b></p><p><b>  case '2':</b></p><p><b> 

85、 while(n)</b></p><p><b>  {</b></p><p>  system("clear");</p><p>  printf("\t\t*******************話費服務----自助服務**************\n");</p>&l

86、t;p>  printf("網(wǎng)上手機交費系統(tǒng)登錄!\t(輸入'exit'返回主菜單)\n\n");</p><p>  printf("請輸入手機號碼:");</p><p>  scanf("%s",&usrname);</p><p><b>  q=1;<

87、/b></p><p>  setbuf(stdin,NULL);</p><p>  if(strcmp(usrname,"exit")==0)</p><p>  break;</p><p>  set_disp_mode(STDIN_FILENO,0);</p><p>  g

88、etpasswd(usrpwd,sizeof(usrpwd));</p><p>  set_disp_mode(STDIN_FILENO,1);</p><p>  setbuf(stdin,NULL);</p><p>  if((sp=getservbyname(service,"tcp"))==NULL){</p><

89、p>  fprintf(stderr,"與服務器會話時出錯(getservbyname)!\n");</p><p><b>  exit(-1);</b></p><p><b>  }</b></p><p>  if((hp=gethostbyname(dest))==0){</p&g

90、t;<p>  fprintf(stderr,"與接服務器會話時出錯(gethostbyname)!\n");</p><p><b>  exit(-1);</b></p><p><b>  }</b></p><p>  bzero(&sin,sizeof(sin));<

91、;/p><p>  bcopy(hp->h_addr,&sin.sin_addr,hp->h_length);</p><p>  sin.sin_family=hp->h_addrtype;</p><p>  sin.sin_port=sp->s_port;</p><p>  if((s=socket(AF_

92、INET,SOCK_STREAM,0))==-1){</p><p>  fprintf(stderr,"與服務器會話時出錯(socket)!\n");</p><p><b>  exit(-1);</b></p><p><b>  }</b></p><p>  if(co

93、nnect(s,(struct sockaddr*)&sin,sizeof(sin))==-1){</p><p>  fprintf(stderr,"與服務器會話時出錯(connect)!\n");</p><p><b>  close(s);</b></p><p><b>  exit(-1);&l

94、t;/b></p><p><b>  }</b></p><p>  sprintf(connbuf,"phoneSer-3-%s-%s",usrname,usrpwd);</p><p>  if(write(s,connbuf,rec_length)!=rec_length){ </p><p

95、>  fprintf(stderr,"Write Socket s ERROR!\n");</p><p>  fprintf(stderr,"請按任意鍵返回!\n");</p><p>  getchar();</p><p>  close(s); </p><p><b>  ex

96、it(-1);</b></p><p><b>  }</b></p><p>  if(read(s,connbuf,rec_length)==0){ </p><p>  fprintf(stderr,"Read Socket s Error\n");</p><p>  fprint

97、f(stderr,"請按任意鍵返回!\n");</p><p>  getchar();</p><p><b>  close(s);</b></p><p><b>  exit(-1);</b></p><p><b>  }</b></p>

98、;<p><b>  close(s);</b></p><p>  if(strcmp(connbuf,"failed")==0)</p><p><b>  {</b></p><p>  printf("手機號不存在或密碼錯誤!請按任意鍵重新輸入。\n");<

99、;/p><p>  getchar();</p><p>  getchar();</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  st

100、rsplit(connbuf,v,d);</p><p><b>  while(q)</b></p><p><b>  {</b></p><p><b>  w=1;</b></p><p>  system("clear");</p>

101、<p>  printf("%s,歡迎您!\n",v[1]);</p><p>  printf("*********************話費服務----網(wǎng)上交費************************\n");</p><p>  printf("*\t1.網(wǎng)銀交費\t2.手機余額查詢\t\t3.銀行余額查詢 *\

102、t\t\n*\t4.注銷\t\t5.返回主菜單\t\t0.退出\t\t*\n");</p><p>  printf("*****************************************************************\n");</p><p>  printf("請選擇您的操作:");</p>

103、<p>  setbuf(stdin,NULL);</p><p>  scanf("%c",&chose);</p><p>  setbuf(stdin,NULL);</p><p>  switch(chose)</p><p><b>  {</b></p>

104、<p><b>  case '1':</b></p><p><b>  while(w)</b></p><p><b>  {</b></p><p>  printf("請輸入手機號碼(或exit返回):");</p><p&

105、gt;  scanf("%s",&phoneno);</p><p>  if(strcmp(phoneno,"exit")==0)</p><p><b>  {</b></p><p><b>  z=0;</b></p><p><b>

106、;  break;</b></p><p><b>  }</b></p><p>  if((sp=getservbyname(service,"tcp"))==NULL){</p><p>  fprintf(stderr,"與服務器會話時出錯(getservbyname)!\n");&l

107、t;/p><p><b>  exit(-1);</b></p><p><b>  }</b></p><p>  printf("phoneno-dest:%s",dest);</p><p>  if((hp=gethostbyname(dest))==0){</p>

108、;<p>  fprintf(stderr,"與接服務器會話時出錯(gethostbyname)!\n");</p><p><b>  exit(-1);</b></p><p><b>  }</b></p><p>  bzero(&sin,sizeof(sin));<

109、/p><p>  bcopy(hp->h_addr,&sin.sin_addr,hp->h_length);</p><p>  sin.sin_family=hp->h_addrtype;</p><p>  sin.sin_port=sp->s_port;</p><p>  if((s=socket(AF_I

110、NET,SOCK_STREAM,0))==-1){</p><p>  fprintf(stderr,"與服務器會話時出錯(socket)!\n");</p><p><b>  exit(-1);</b></p><p><b>  }</b></p><p>  if(con

111、nect(s,(struct sockaddr*)&sin,sizeof(sin))==-1){</p><p>  fprintf(stderr,"與服務器會話時出錯(connect)!\n");</p><p><b>  close(s);</b></p><p><b>  exit(-1);<

112、;/b></p><p><b>  }</b></p><p>  sprintf(quebuf,"phoneSer-1-%s",phoneno);</p><p>  if(write(s,quebuf,rec_length)!=rec_length){</p><p>  fprintf(

113、stderr,"Write Socket s ERROR!\n");</p><p>  fprintf(stderr,"請按任意鍵返回!\n");</p><p>  getchar();</p><p>  close(s); </p><p><b>  z=0;</b>&l

114、t;/p><p><b>  break;</b></p><p><b>  }</b></p><p>  if(read(s,quebuf,rec_length)==0){ </p><p>  fprintf(stderr,"Read Socket s Error\n");&

115、lt;/p><p>  fprintf(stderr,"請按任意鍵返回!\n");</p><p>  getchar();</p><p><b>  close(s);</b></p><p><b>  z=0;</b></p><p><b>

116、;  break;</b></p><p><b>  }</b></p><p>  if(strcmp(quebuf,"failed")==0)</p><p><b>  {</b></p><p>  printf("手機號不存在!請重新輸入。\n&

117、quot;);</p><p><b>  close(s);</b></p><p><b>  z=0;</b></p><p>  getchar();</p><p>  getchar();</p><p><b>  }</b></p&

118、gt;<p><b>  else</b></p><p><b>  {</b></p><p><b>  w=0;</b></p><p><b>  close(s);</b></p><p><b>  }</b&g

119、t;</p><p><b>  }</b></p><p><b>  if(w==0)</b></p><p><b>  {</b></p><p>  printf("請輸入交費金額:");</p><p>  scanf(&

120、quot;%s",&money);</p><p><b>  z=1;</b></p><p><b>  }</b></p><p><b>  close(s);</b></p><p><b>  while(z)</b><

121、/p><p><b>  {</b></p><p>  printf("請輸入銀行卡號(或exit返回):");</p><p>  scanf("%s",&bankno);</p><p>  if(strcmp(bankno,"exit")==0)&l

122、t;/p><p><b>  break;</b></p><p>  setbuf(stdin,NULL);</p><p>  set_disp_mode(STDIN_FILENO,0);</p><p>  getpasswd(bankpwd,sizeof(bankpwd));</p><p>

123、  printf("%s number is %s",bankno,bankpwd);</p><p>  getchar();</p><p>  set_disp_mode(STDIN_FILENO,1);</p><p>  setbuf(stdin,NULL);</p><p>  if((sp=getservby

124、name(service,"tcp"))==NULL){</p><p>  fprintf(stderr,"與服務器會話時出錯(getservbyname)!\n");</p><p><b>  exit(-1);</b></p><p><b>  }</b></p>

125、;<p>  if((hp=gethostbyname(dest))==0){</p><p>  fprintf(stderr,"與接服務器會話時出錯(gethostbyname)!\n");</p><p><b>  exit(-1);</b></p><p><b>  }</b>

126、</p><p>  bzero(&sin,sizeof(sin));</p><p>  bcopy(hp->h_addr,&sin.sin_addr,hp->h_length);</p><p>  sin.sin_family=hp->h_addrtype;</p><p>  sin.sin_port

127、=sp->s_port;</p><p>  if((s=socket(AF_INET,SOCK_STREAM,0))==-1){</p><p>  fprintf(stderr,"與服務器會話時出錯(socket)!\n");</p><p><b>  exit(-1);</b></p><p

128、><b>  }</b></p><p>  printf("socket\n");</p><p>  if(connect(s,(struct sockaddr*)&sin,sizeof(sin))==-1){</p><p>  fprintf(stderr,"與服務器會話時出錯(connect

129、)!\n");</p><p><b>  close(s);</b></p><p><b>  exit(-1);</b></p><p><b>  }</b></p><p>  printf("connect\n");</p>

130、<p>  sprintf(quebuf,"bankSer-0-%s-%s",bankno,bankpwd);</p><p>  if(write(s,quebuf,rec_length)!=rec_length){ </p><p>  fprintf(stderr,"Write Socket s ERROR!\n");</p

131、><p>  fprintf(stderr,"請按任意鍵返回!\n");</p><p>  getchar();</p><p>  close(s); </p><p><b>  break;</b></p><p><b>  }</b></p&

132、gt;<p>  printf("%s\n",quebuf);</p><p>  printf("write\n");</p><p>  if(read(s,quebuf,rec_length)==0){ </p><p>  fprintf(stderr,"Read Socket s Error!

133、\n");</p><p>  fprintf(stderr,"請按任意鍵返回!\n");</p><p>  getchar();</p><p><b>  close(s);</b></p><p><b>  break;</b></p><

134、p><b>  }</b></p><p>  printf("%s\n",quebuf);</p><p>  printf("reading\n");</p><p><b>  close(s);</b></p><p>  if(strcmp(q

135、uebuf,"failed")==0)</p><p><b>  {</b></p><p>  printf("銀行卡不存在或密碼錯誤!請重新輸入。\n");</p><p>  getchar();</p><p><b>  }</b></p&g

136、t;<p><b>  else</b></p><p><b>  {</b></p><p>  if((sp=getservbyname(service,"tcp"))==NULL){</p><p>  fprintf(stderr,"與服務器會話時出錯(getservb

137、yname)!\n");</p><p><b>  exit(-1);</b></p><p><b>  }</b></p><p>  if((hp=gethostbyname(dest))==0){</p><p>  fprintf(stderr,"與接服務器會話時出錯

138、(gethostbyname)!\n");</p><p><b>  exit(-1);</b></p><p><b>  }</b></p><p>  bzero(&sin,sizeof(sin));</p><p>  bcopy(hp->h_addr,&s

139、in.sin_addr,hp->h_length);</p><p>  sin.sin_family=hp->h_addrtype;</p><p>  sin.sin_port=sp->s_port;</p><p>  if((s=socket(AF_INET,SOCK_STREAM,0))==-1){</p><p>

140、;  fprintf(stderr,"與服務器會話時出錯(socket)!\n");</p><p><b>  exit(-1);</b></p><p><b>  }</b></p><p>  printf("quebuf-OK - socket\n");</p>

141、<p>  if(connect(s,(struct sockaddr*)&sin,sizeof(sin))==-1){</p><p>  fprintf(stderr,"與服務器會話時出錯(connect)!\n");</p><p><b>  close(s);</b></p><p><

142、b>  exit(-1);</b></p><p><b>  }</b></p><p>  printf("quebuf-OK - connect\n");</p><p>  sprintf(quebuf,"both-%s-%s-%s-%s",bankno,phoneno,mone

143、y,usrname);</p><p>  printf("%s\n",quebuf);</p><p>  if(write(s,quebuf,rec_length)!=rec_length){ </p><p>  fprintf(stderr,"Write Socket s ERROR!\n");</p>

144、<p>  fprintf(stderr,"請按任意鍵返回!\n");</p><p>  getchar();</p><p>  close(s); </p><p><b>  break;</b></p><p><b>  }</b></p>&

145、lt;p>  printf("quebuf-OK write\n");</p><p>  if(read(s,quebuf,rec_length)==0){</p><p>  printf("quebuf-OK read is error!\n");</p><p>  fprintf(stderr,"Re

溫馨提示

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

評論

0/150

提交評論