Linux下Socket網絡編程之點對點聊天室

1. 系統設計的目的與意義

掌握信號與信號處理的概念,瞭解點對點聊天室的設計需求,掌握相關的理論知識,切實掌握程序設計的分析方法,勇於實踐,多參考開源項目和代碼。實現點對點聊天室程序設計,Linux網絡程序設計在服務器領域、嵌入式領域有着廣泛的應用

2. 系統開發環境

1)VMware Workstation 7.0

2)Red Hat Enterprise Linux 5

3)硬件:每人一臺計算機並能夠連入局域網

 (4) 軟件:Windows xp/7  c語言

3. 使用的相關技術

Linux系統下使用C語音進行編程

1)Linux它是一個類UNIX內核的可以自由發佈的實現版本,一個操作系統的底層核心。完整的Linux系統=內核+外圍工具,可以獲得內核源代碼,編譯並安裝,然後獲得並安裝許多其他自由發佈的軟件,從而創建一個完整的Linux,通常稱爲Linux系統。

缺點:操作困難、工具軟件和開發軟件版本太多,不易選擇。

優點:開放性的、多用戶多任務的系統,具有出色的穩定性、速度性能、可靠的系統安全性,提供了豐富的網絡功能、良好的用戶界面,標準兼容性和可移植性。

2)C語音是一種計算機程設計序語言,它既有高級語言的特點又有彙編語言的特點。它可以作爲系統設計語言,編寫工作系統應用程序,也可以作爲應用程序設計語言,編寫不依賴於計算機硬件的應用程序。

3)C/S(Client/Server)或客戶端/服務器結構模式:建立在局域網的基礎上。客戶機響應速度快但只應用於局域網,客戶需要安裝專用的客戶端軟件但應用程序的升級和客戶端程序的維護相對困難。

二、需求分析

1.點對點聊天室系統示意圖

 


2.系統的基本功能

1)服務器:

• 接受客戶端發送過來的數據並顯示

• 接受鍵盤輸入的數據,併發送給客戶端

• 客戶端關閉,服務器端的進程也將全部退出。

2)客戶端:

• 接受服務器發送過來的數據並顯示

• 接受鍵盤輸入的數據,併發送給服務器

• 服務器關閉,客戶端的進程也將全部退出。

三、概要設計

1.socket函數

• 包含頭文件<sys/socket.h>

• 功能:創建一個套接字用於通信

• 原型

– int socket(int domain, int type, int protocol);

• 參數

– domain :指定通信協議族(protocol family)

– type:指定socket類型,流式套接字SOCK_STREAM,數據報套接字SOCK_DGRAM,原始套接字SOCK_RAW

–  protocol :協議類型

• 返回值:成功返回非負整數, 它與文件描述符類似,我們把它稱爲套接口描述字,簡稱套接字。失敗返回-1

2.bind函數

•     包含頭文件<sys/socket.h>

• 功能:綁定一個本地地址到套接字

• 原型

      - int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

• 參數

– sockfd:socket函數返回的套接字

– addr:要綁定的地址

– addrlen:地址長度

• 返回值:成功返回0,失敗返回-1

3.listen函數

•     包含頭文件<sys/socket.h>

• 功能:將套接字用於監聽進入的連接

• 原型

     - int listen(int sockfd, int backlog);

• 參數

– sockfd:socket函數返回的套接字

–  backlog:規定內核爲此套接字排隊的最大連接個數

• 返回值:成功返回0,失敗返回-1


4.accept函數

•     包含頭文件<sys/socket.h>

• 功能:從已完成連接隊列返回第一個連接,如果已完成連接隊列爲空,則阻塞。

• 原型

 -int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

• 參數

– sockfd:服務器套接字

– addr:將返回對等方的套接字地址

– addrlen:返回對等方的套接字地址長度

• 返回值:成功返回非負整數,失敗返回-1

5.connect函數

•     包含頭文件<sys/socket.h>

• 功能:建立一個連接至addr所指定的套接字

• 原型

     -int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

• 參數

– sockfd:未連接套接字

– addr:要連接的套接字地址

– addrlen:第二個參數addr長度

• 返回值:成功返回0,失敗返回-1

6.write函數

•     包含頭文件<unistd.h>

• 功能:向文件輸出數據

• 原型

     -ssize_t write(int fd,const void *buf,size_t nbytes)

• 參數

– fd:數據傳輸對象的文件描述符

– addr:保存要傳輸數據的緩衝地址值

– addrlen:要傳輸數據的字節數

• 返回值:成功返回寫入的字節數,失敗返回-1

7.read函數

•     包含頭文件<unistd.h>

• 功能:用來接收數據

• 原型

     -ssize-t read(int fd,void *buf,size_t  nbytes);

• 參數

– fd:顯示數據接收對象的文件描述符

– buf:要保存接收數據的緩衝地址值

– nbytes:要接收數據的最大字節數

• 返回值:成功返回接收的字節數,失敗返回-1  

8.close函數


•     包含頭文件<unistd.h>

• 功能: 關閉文件或套接字

• 原型

     -int close(int fd);

• 參數

– fd:需要關閉的文件或套接字的文件描述符

• 返回值:成功返回0,失敗返回-1

9.fgets函數

•     包含頭文件<stdio.h>

• 功能: 從文件流中讀取一行或指定個數的字符

• 原型

     -char *fgets(char *string,int size,FILE *stream);

• 參數

– string:字符數組,用來保存讀取到的字符

– size:要讀取的字符的個數,如果該行字符數大於size-1,則讀到size-1個字符時結束,並在最後補充‘\0’;如果該行字符數小於等於size-1,則讀取所有字符,並在最後補充‘\0’。

– stream :文件流指針

• 返回值:讀取成功,返回讀到的字符串,即string;失敗返回NULL。

10.fputs函數

•     包含頭文件<stdio.h>

• 功能:將指定的字符串寫入到文件流中

• 原型

     -int fputs(char *string,FILE *stream);

• 參數

– string:爲將要寫入的字符串

– stream:文件流指針

• 返回值:成功返回非負數,失敗返回EOF

11.handler函數

•     包含頭文件<stdio.h>

• 功能:特定事件發生時,操作系統向進程發送信息

• 原型

     -void handler(int sig)

• 返回值:參數類型爲int型,返回void型函數

12.signal函數

•    包含頭文件<signal.h>

• 功能:獲取系統產生各種信號並對此信號調用用戶自己定義

• 原型

     -void (* signal(int signo,void (*func)(int)))(int)

• 參數

– 第一個參數:指定信號的值


– 第二個參數:一個函數指針,用於指定針對信號的處理函數的函數內存空間地址

• 返回值:參數類型爲int型,返回void型函數指針

13.fork函數

•    包含頭文件<unistd.h>

• 功能:把Linux 變換爲多任務系統的基礎

• 原型

     -pid_t fork(void)

• 返回值:成功時返回進程ID,失敗時返回-1

14.kill函數

•     包含頭文件<signal.h>

• 功能:發送指定的信號到相應進程

• 原型

     -int kill(pid_t,int sig)

• 參數

– pid_t:參數進程標識號

– sig:進程號要傳遞信號值

• 返回值:成功返回0,失敗返回-1

四、結果


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章