

免費預(yù)覽已結(jié)束,剩余18頁可下載查看
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
Linux程序設(shè)計期末大作業(yè)報告 信息工程與自動化學院 專 業(yè): 計算機科學與技術(shù) 年 級: 2009級 學 生 姓 名: 徐興繁 學 生 學 號: 200910405214 任 課 教師姓名: 李英娜 任 課 教師職稱:講 師 摘要:shell是一種具備特殊特殊功能的程序,它是介于使用者和UNIX、/linux操作系統(tǒng)之核心程序間的一個接口。本設(shè)計主要實現(xiàn)一個Linux下的局域網(wǎng)聊天工具的設(shè)計。該設(shè)計主要分為兩部分,客戶端部分和服務(wù)器部分。設(shè)計并實現(xiàn)一個簡單的聊天室程序,可以是終端字符界面,支持用戶管理,用戶名/密碼注冊和登錄,客戶端登陸到服務(wù)器聊天后,可以在聊天室內(nèi)與其他用戶交流(這個聊天室中的任何一個用戶輸入一段字符后,室內(nèi)的其他用戶都可以看到這句話)。據(jù)此,聊天程序分為客戶端和服務(wù)器端??蛻舳藢?yīng)每一個參加聊天的用戶,完成從終端上輸入采集并傳遞到服務(wù)器端和從服務(wù)器端接收信息輸出顯示的功能。兩個部分都使用C語言,利用vi編輯器,通過Berkeley套接口編程實現(xiàn)相關(guān)功能。關(guān)鍵詞:linux,shell編程,聊天室,客戶端,服務(wù)器,套接字。目錄1、期末大作業(yè)的目的22、大作業(yè)的基本要求33、設(shè)計內(nèi)容33、1 shell編程(20分)33.1.1字符串的判斷33.1.2月份的截取轉(zhuǎn)換43、2 聊天室編程(50分)53.2.1需要實現(xiàn)的主要功能63.2.2 客戶端功能模塊63.2.3 服務(wù)器功能模塊73.2.4代碼實現(xiàn):73.2.4設(shè)計結(jié)果截圖:144、小結(jié):175、參考文獻171、期末大作業(yè)的目的Linux程序設(shè)計大作業(yè)是在完成理論課程學習之后,通過大作業(yè)的方式對學生進行綜合實踐考核,在學生掌握Linux的基本編程知識及常用的操作命令基礎(chǔ)上,提高學生對所學知識的應(yīng)用能力,特別是:煅煉學生搜集有關(guān)Linux資料,在資料文檔的幫助下,運用Linux的基本知識及常用的操作命令來解決問題的能力。2、大作業(yè)的基本要求要求能完成給定的編程任務(wù),并寫出相應(yīng)的大作業(yè)總結(jié)報告2.1、根據(jù)合理的進度安排,按照程序的流程及方法,踏實地完成期末大作業(yè)的任務(wù)安排。 2.2、按照任務(wù)要求,完成各個功能模塊的功能劃分和程序編寫,調(diào)試代碼并運行。 2.3、按要求撰寫大作業(yè)報告。3、設(shè)計內(nèi)容3、1 shell編程(20分)要求:寫出2個Shell程序,每個不少于15行(如實現(xiàn)自己模擬shell下的cd、ls指令等),說明程序主要功能,每行給出注釋;3.1.1 字符串的判斷寫一個腳本,檢測用戶輸入串的合法性, 要求串由大小寫字母、數(shù)字組成,無標點、特殊符號、空格。思路:將輸入的串中 非字母數(shù)字的內(nèi)容刪除或替換為空后若和原來輸入的相同則合法,否則不合法。#!/bin/bashisvalidAlphaNum()compressed=$(echo $1 | sed s/:alnum:/g) #替換不合要求字符為空if $compressed != $1 ; thenreturn 1# not valideelsereturn 0 # validefi#函數(shù)體,判斷字串的合法性echo -n Enter input:# -n 強制不換行read input#讀取內(nèi)容存到input中, 無 $ 符號if ! isvalidAlphaNum &input ;then #加引號,否則可能會出錯。echo invalideexit 1elseecho validefiexit 0運行截圖:3.1.2 月份的截取轉(zhuǎn)換輸入一個 “month day year”格式的日期串,程序?qū)⑻幚怼?month”為 其英文單詞的前三個字母,第一個字母大寫,其余的小寫。思路:首先判斷month是數(shù)字、還是單詞,若是數(shù)字,則可查“數(shù)字month”映射表(自定義case結(jié)構(gòu));若是單詞,則取前三個字母,并格式化。#!/bin/bashmonthnoToName() case $1 in 1 ) month=Jan ; 2 ) month=Feb ; 3 ) month=Mar ; 4 ) month=Apr ; 5 ) month=May ; 6 ) month=Jun ; 7 ) month=Jul ; 8 ) month=Aug ; 9 ) month=Sep ; 10) month=Oct ; 11) month=Nov ; 12) month=Dec ; * ) echo $0: Unknown numeric month value $1 &2; exit 1 # default, esac# return 0if $# -ne 3 ; then #若參數(shù)個數(shù)不為3,則有誤echo “Usage: $0 month day year”exit 1fi#判斷參數(shù)1是數(shù)字還是單詞,方法 替換串中所有數(shù)字,若結(jié)果為空,則為數(shù)字,否則為單詞。if -n $(echo $1 | sed s/:digit:/g) # -n 檢測串是為空thenmonthnoToName $1# 數(shù)字else# 取第一個字母并將其變?yōu)榇髮?,再將結(jié)果與取出的第二三字母組合month=”$(echo $1 | cut c1 | tr :lower: :upper:)“month=”$month$(echo $1 | cut -c2-3 | tr :upper: :lower:)”fiecho $month $2 $3 # 輸出結(jié)果exit 0運行截圖:3、2 聊天室編程(50分)設(shè)計并實現(xiàn)一個簡單的聊天室程序,可以是終端字符界面,支持用戶管理,用戶名/密碼注冊和登錄,客戶端登陸到服務(wù)器聊天后,可以在聊天室內(nèi)與其他用戶交流(這個聊天室中的任何一個用戶輸入一段字符后,室內(nèi)的其他用戶都可以看到這句話)。據(jù)此,聊天程序分為客戶端和服務(wù)器端。客戶端對應(yīng)每一個參加聊天的用戶,完成從終端上輸入采集并傳遞到服務(wù)器端和從服務(wù)器端接收信息輸出顯示的功能。3.2.1需要實現(xiàn)的主要功能(1)客戶端輸入服務(wù)器IP和端口號(2)服務(wù)器成功啟動(3)每個客戶端可以找到服務(wù)器,并可以與服務(wù)器進行連接(4)客戶端與服務(wù)器可以實現(xiàn)通訊3.2.2 客戶端功能模塊(1)連接服務(wù)器連接服務(wù)器之前需要解析服務(wù)器地址,創(chuàng)建套接字,設(shè)置相關(guān)參數(shù)。(2)發(fā)送消息功能3.2.3 服務(wù)器功能模塊3.2.4代碼實現(xiàn):(1)客戶端代碼#include #include #include #include #include #include #include #include #define TRUE 1#define PORT 1000 static int sockfd;void recvfromserver() /接受服務(wù)器消息線程入口函數(shù)char mes1024;int nbytes=0;while(1)memset(mes,0,sizeof(mes);nbytes=read(sockfd,mes,sizeof(mes);if(nbytes0)mesnbytes=0;printf(%sn,mes);pthread_exit(NULL);int main(int argc, char *argv)/int sockfd;char buffer1024;struct sockaddr_in server_addr;struct hostent *host;int portnumber,nbytes;char *strhost=127.0.0.1;char clientname20;char password20;char mes1024;int thr_id; /* thread ID for the newly created thread */pthread_t p_thread; /* threads structure */if(argc!=1)fprintf(stderr,Usage:%s an,argv0);exit(1);if(host=gethostbyname(strhost)=NULL)fprintf(stderr,Gethostname errorn);exit(1);/* 客戶程序開始建立 sockfd 描述符 */printf(正在建立套接口.n);if(sockfd=socket(AF_INET,SOCK_STREAM,0)=-1)fprintf(stderr,Socket Error:%san,strerror(errno);exit(1);/* 客戶程序填充服務(wù)端的資料 */bzero(&server_addr,sizeof(server_addr);server_addr.sin_family=AF_INET;server_addr.sin_port=htons(PORT);server_addr.sin_addr=*(struct in_addr *)host-h_addr);printf(套接口創(chuàng)建成功,正在鏈接服務(wù)器.n);/* 客戶程序發(fā)起連接請求 */if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr)=-1)fprintf(stderr,Connect Error:%san,strerror(errno);exit(1);/* 連接成功了 */printf(鏈接服務(wù)器成功n歡迎來到聊天室!n);printf(請輸入你的用戶昵稱:n);scanf(%s,clientname);printf(請輸入登錄密碼:n);scanf(%s,password); printf(n登陸成功);/write(sockfd,clientname,sizeof(clientname);printf(n開始聊天(Quit斷開連接)nn);thr_id = pthread_create(&p_thread, NULL, recvfromserver, NULL);while(1)memset(buffer,0,sizeof(buffer);memset(mes,0,sizeof(mes);scanf(%s,buffer);strcat(mes,clientname);strcat(mes,:);strcat(mes,buffer);/printf(main thread %sn,mes);if(write(sockfd,mes,sizeof(mes)=-1)fprintf(stderr,Write Error:%sn,strerror(errno);exit(1);if(strcmp(buffer,Quit)=0)break;/* 結(jié)束通訊 */close(sockfd);exit(0);(2)服務(wù)器代碼#include #include #include #include #include #include #include #include #define MAXLINE 1000 /在一條消息中最大的輸出字符數(shù)#define LISTENQ 20 /最大監(jiān)聽隊列#define PORT 1000 /監(jiān)聽端口#define MAXFD 20 /最大的在線用戶數(shù)量void *get_client(void *); int sockfd,i;static int maxi=0;/maxi表示當前client數(shù)組中最大的用戶的i值static int clientMAXFD;void recvandsend(void) /監(jiān)聽轉(zhuǎn)發(fā)線程入口函數(shù)int index=0;int nbytes=0;char buffer1024;int len;int outindex=0;while(1)if(maxi0)memset(buffer,0,sizeof(buffer);nbytes=0;/index+;nbytes=read(clientindex+,buffer,sizeof(buffer);/printf(%d,%dn,index,clientindex);if(nbytes0)buffernbytes=0;printf( %sn,buffer);outindex=0;while(outindex=maxi)index=0;pthread_exit(NULL);int main(int argc, char *argv)/int client_fdLISTENQ,clientnum=0;struct sockaddr_in server_addr;struct sockaddr_in client_addr;int sin_size,portnumber;char hello=Hello! Are You Fine?n;int thr_id; /* thread ID for the newly created thread */pthread_t p_thread; /* threads structure */int new_fd=0;memset(client,0,sizeof(client);if(argc!=1)fprintf(stderr,Usage:%s portnumberan,argv0);exit(1);/* 服務(wù)器端開始建立 socket 描述符 */if(sockfd=socket(AF_INET,SOCK_STREAM,0)=-1)fprintf(stderr,Socket error:%sna,strerror(errno);exit(1);/* 服務(wù)器端填充 sockaddr 結(jié)構(gòu) */bzero(&server_addr,sizeof(struct sockaddr_in);server_addr.sin_family=AF_INET;server_addr.sin_addr.s_addr=htonl(INADDR_ANY);server_addr.sin_port=htons(PORT);/* 捆綁 sockfd 描述符 */if(bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr)=-1)fprintf(stderr,Bind error:%sna,strerror(errno);exit(1);printf(服務(wù)器監(jiān)聽端口%d.n,PORT);/* 監(jiān)聽 sockfd 描述符 */if(listen(sockfd,LISTENQ)=-1)fprintf(stderr,Listen error:%sna,strerror(errno);exit(1);thr_id = pthread_create(&p_thread, NULL, recvandsend, NULL);printf(歡迎來到聊天室!n);while(1)/* 服務(wù)器阻塞,直到客戶程序建立連接 */if(maxi=20)printf(以達到人數(shù)上線n);continue;sin_size=sizeof(struct sockaddr_in);if(new_fd=accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size)=-1)fprintf(stderr,Accept error:%sna,strerror(errno);exit(1);/*fprintf(stderr,Server get connection from %sn,inet_ntoa(client_addr.sin_addr);*/clientmaxi+=new_fd;printf(n新用戶進入聊
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 歐派櫥柜衣柜合同協(xié)議
- 正規(guī)物流運輸合同協(xié)議模板
- 品牌代購合同協(xié)議
- 2025擔保合同(供租賃保證用)租賃擔保合同
- 2025啤酒銷售代理合同范本
- 陜西省漢中市2025屆高三下學期二模試題 生物 含解析
- 商店長期租賃合同協(xié)議
- 2025蘭州市合同范本 蘭州市合同書版本
- 2025餐廳裝修承包合同
- 樓盤物業(yè)入駐合同協(xié)議
- 組織供應(yīng),運輸,售后服務(wù)方案
- (完整版)各檔口單品菜品毛利率核算表
- 信息隱藏技術(shù)全套教學課件
- 2023年云南省昆明市中考作文真題解析及欣賞:堅持的力量
- SMC電磁閥的選型手冊
- 2023年江蘇泰州市第四人民醫(yī)院招考聘用高層次人才11人模擬備考試卷(共1000題含答案解析)
- 工會換屆選舉請示樣式
- 七年級音樂上冊 《青少年管弦樂隊指南》教學課件
- 新中國史智慧樹知到答案章節(jié)測試2023年
- 員工面試登記表通用模板
- 部編版2022-2023學年六年級下冊期末語文升學分班??家族e題模擬試卷(二)含解析
評論
0/150
提交評論