linux下的聊天程序_第1頁
linux下的聊天程序_第2頁
linux下的聊天程序_第3頁
linux下的聊天程序_第4頁
linux下的聊天程序_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、操作系統(tǒng)實驗報告課程名稱操作系統(tǒng)實驗學期2011至2012學年第一學期學生所在系部通信工程系年級 2008專業(yè)班級010812 班學生姓名路遙學號01081191任課教師陳晨實驗成績通信工程系制課前資料:參考資料查閱工具:man,女口 man ls,man make;C 編寫手冊,機器上“ linux c 參考 ”;Shell 編寫手冊,機器上“ linux shell 參考“;Makefile 編寫手冊,機器上“ makefile 參考“;Awk 編寫手冊,機器上“ awk 參考“; 經(jīng)典書籍,學習 linux,unix 的最佳書籍“ Linux ,unix shell 編程指南“一、實驗題

2、目:熟悉linux操作系統(tǒng)下最簡單實用的通信程序socket最好能全部完成,否則按照完成情況打分。二、實驗?zāi)康模和ㄟ^對socket的編寫,可以了解linux下最簡單實用的進程通信方法,為后續(xù)信號燈、消息 隊列等學習奠定基礎(chǔ)。三、實驗設(shè)備及環(huán)境:1. 硬件設(shè)備: PC 機一臺2. 軟件環(huán)境:安裝 Linux 操作系統(tǒng),并安裝相關(guān)的程序開發(fā)環(huán)境,如 C C+tshbsh 等編程 語言環(huán)境。四、實驗內(nèi)容及要求:(1)用 C 語言編程實現(xiàn) linux 簡單的聊天室功能。用戶程序命名為 client.c; 服務(wù)器程序命名為 server.c綁定端口等信息見實驗方法內(nèi)容;要求client可以通過socke

3、t連接server在 client, 提示輸入服務(wù)器 ip若連接 server 的 socket 建立成功,返回提示信息Client輸入的聊天內(nèi)容在 client端(多個client端)和server端同時顯示; 多個client可同時接入server進入聊天室,最多支持 20個client ; Client 端輸入 quit 退出連接, server 端提示 client 退出??蛇x擇使用多線程實現(xiàn)多客戶端;其他細節(jié)見輸出結(jié)果;五、實驗方法內(nèi)容1. 需要的頭文件 #include #include #include #include #include #include #include #i

4、nclude #include #include #include表示是否用戶確定退出2. 主要的常量變量 客戶端: #define TRUE 1 #define PORT 5000 int quit=0; /quit服務(wù)器端:#define MAXLINE 1000 /在一條消息中最大的輸出字符數(shù)#define LISTENQ 20/#define PORT 5000/#define MAXFD 20/最大監(jiān)聽隊列監(jiān)聽端口 最大的在線用戶數(shù)量void *get_client(void *); int i,maxi=-1;/maxi表示當前 client 數(shù)組中最大的用戶的 i 值int cl

5、ientMAXFD;3. 主要模塊 客戶端:int main(void)void *get_server(void* sockfd)/get_server 函數(shù),用于接受服務(wù)器轉(zhuǎn)發(fā)的消息 服務(wù)器端:int main()void *get_client(void *sockfd) /運行 get_client 函數(shù),處理用戶請求六代碼 考慮大家沒做過,給幾個例子: 參考 socket 編程 .pdf*客戶端程序 client.c */#include #include #include #include #include #include #include #include #define TR

6、UE 1#define PORT 5000static 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

7、sockaddr_in server_addr;struct hostent *host;int portnumber,nbytes;char strhost16;char clientname20;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);printf( 請輸入服務(wù)器 ip 地址 n); scanf(%s,st

8、rhost);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); serve

9、r_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);/*

10、 連接成功了 */printf( 鏈接服務(wù)器成功 n 歡迎來到聊天室 n);printf( 請輸入你的用戶昵稱 n); scanf(%s,clientname);/ write(sockfd,clientname,sizeof(clientname);printf(nn 開始聊天吧( 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,buffe

11、r);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);*服務(wù)器程序 (server.c) */#include #include #include #include #i

12、nclude #include #include #include #define MAXLINE 1000#define LISTENQ 20#define PORT 5000 #define MAXFD 20 void *get_client(void *); int sockfd,i;static int maxi=0;/maxi static int clientMAXFD;/ 在一條消息中最大的輸出字符數(shù)/ 最大監(jiān)聽隊列/ 監(jiān)聽端口/ 最大的在線用戶數(shù)量表示當前 client 數(shù)組中最大的用戶的void recvandsend(void)/ 監(jiān)聽轉(zhuǎn)發(fā)線程入口函數(shù)int index=0

13、;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; pthrea

14、d_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 */ in

15、t 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_

16、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)

17、聽 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_

18、fd=accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size)=-1) fprintf(stderr,Accept error:%sna,strerror(errno); exit(1);getconnection/*fprin tf(stderr,Serverfrom %sn,i net_n toa(clie nt_addr.sin_addr);*/clie ntmaxi+=new_fd;prin tf(n新用戶進入聊天室%dn, new_fd);close(sockfd);exit(0);七、實驗結(jié)果1.執(zhí)行結(jié)果服務(wù)器打開Eroo

19、thaha root#. /server 服務(wù)器監(jiān)聽端口 5000. 歡迎來到本聊天室客戶端打開,并輸入了地址,昵稱Crooroot# /client 請輸入服務(wù)器IP地址127.0.0.1正在建立套接口.套接口建立成功,鏈接服務(wù)器中 鏈接服務(wù)器成功 歡迎來到聊天室請輸入你的用戶昵稱 張三開始聊天吧(Quit斷開鏈接)服務(wù)器端顯示roothaha root# ./server 服務(wù)器監(jiān)聽端口 5000. 歡迎來到本聊天室新用戶進入聊天室客戶端2進入roothmhsi root# /client請輸入服務(wù)器:CP地址127-0.0-1正在建立套接口.套凄口建立成功,鏈接服務(wù)器中鏈接服務(wù)器成功歡迎

20、來到聊天室請輸入你的用戶昵稱 李四開始聊天吧Quit斷開鏈接)服務(wù)器顯示Eroothaha root# /server 服務(wù)器監(jiān)聽端口 5000 歡迎來到本聊天室新用戶進入聊天室.新用戶進入聊天室張三輸入Lrocthaha root# /client 請輸入服務(wù)器叩地址 127.0.0.1正在建立套接口套接口建立成功工鏈接服務(wù)器中 鏈接服務(wù)器成功 歡迎來到聊天皇請輸入你的用戶昵稱 樂三開始聊天吧 CfQultr斷開鏈接 你好啊,李四張三:你好啊,李四李四端顯示roothaha root# /client 請輸入服務(wù)器TP地址127.0.0.1正在建立套接口套接口建立成功,鏈接服務(wù)器中. 鏈接服

21、務(wù)器成功 歡迎來到聊天室請輸入你的用戶昵稱 李四開始聊天吧Quit斷開鏈接)張三:你好啊,李四服務(wù)器顯示Crootfihaha root# ./server 服務(wù)器監(jiān)聽端口 5000. 歡迎來到本聊天室新用戶進入聊天室新用戶進入聊天室.來三:你好啊,孝四李四輸入rootfihaha root# ./client請輸入服務(wù)器工P地址127-0.0-1正在建立套接口.套接口建立成功,鏈接服務(wù)器中鏈接服務(wù)器成功歡迎來到聊天室請輸入你的用戶昵稱 李四開始聊天吧(Quif斷開鏈接)張三:你好啊,李四你也好李四:你也好張三顯示rootShaha root#ulient請輸入服務(wù)器IP地址127.0.0.1正在建立套接口 套接口建立成功,鏈接服務(wù)器中 鏈接服務(wù)器成功歡迎來到聊天室請輸入你的用戶昵稱冢三開始聊天吧(Quit*斷開鏈接 你好啊,李四張三:你好啊,李四李四:你也好服務(wù)器顯示LrootShaha root# /server 服務(wù)器監(jiān)聽端口 500

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論