freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

基于linux網絡聊天室-畢業(yè)設計論文-資料下載頁

2024-11-23 16:06本頁面

【導讀】基于資源共享和軟件自由的思想,linux成為越來越多技術人員的理想之國。任網絡構建和維護。出于對unix技術優(yōu)勢的出色繼承和延續(xù),linux對多種網絡協(xié)議的。支持使得網絡解決方案極大的豐富。在Linux中的網絡編程是通過socket接口來進行的,Socket是TCP/IP網絡的API。但是一種特殊的I/O,它也是一種文件描述符。socket有TCP和UDP兩個協(xié)議,TCP協(xié)議。有數據的可靠性、應用的實時性、網絡的可靠性三個優(yōu)點。因此選擇TCP協(xié)議更為可靠。本系統(tǒng)實現了在Linux網絡聊天室的基本功能。在Linux下編寫并調試服務器端程。序和客戶端程序,實現了客戶、服務器之間的連接接和通信。口分別運行客戶、服務器端的程序,或者兩臺主機鏈接分別作為客戶和服務器的方式。用多線程實現數據的交換,程序經gcc調試成功,可以在單機網絡聊天中使用。

  

【正文】 畢業(yè) 論文 ) 18 struct sockaddr { unsigned short sa_family。 /*地址族 */ char sa_data[14]。 /*14 字節(jié)的協(xié)議地址,包含該 socket 的 IP 地址和端口號。 */ }。 struct sockaddr_in { short int sa_family。 /*地址族 */ unsigned short int sin_port。 /*端口號 */ struct in_addr sin_addr。 /*IP 地址 */ unsigned char sin_zero[8]。 /*填充 0 以保持與 struct sockaddr 同樣大小 */ }。 這兩個數據類型是等效的,可以相互轉化,通常 sockaddr_in 數據類型使用更為方便。在建立 socketadd 或 sockaddr_in 后,就可以對該 socket 進行適當的操作了。 (2)結構字段 表 列出了該結構 sa_family 字段可選的常見值。 表 sa_family 字段 結構定義頭文件 include i/ Sa_family AF_INET: IPv4 協(xié)議 AF_INET6: IPv6 協(xié)議 AF_LOCAL: UNIX 域協(xié)議 AF_LINK:鏈路地址協(xié)議 數據存儲優(yōu)先順序 (1)函數說明 計算機數據存儲有兩種字節(jié)優(yōu)先順序:高位字節(jié)優(yōu)先和低位字節(jié)優(yōu)先。 Inter 上數據以高位字節(jié)優(yōu)先順序在網絡上傳輸,因此在有些情況下,需要對這兩個字節(jié)存儲優(yōu)先順序進行相互轉化。這里用到了四個函數: htons、 ntohs、 htonl、 ntohl。這四個地址分別實現網絡字節(jié)序和主機字節(jié)序的轉化,這里的 h 代表 host, n 代表 work, s 代表 short, l 代表 long。通常 16 位的 IP 端口號用 s 代表,而 IP 地址用 l 來代表。 (2)函數格式說明 表 列出了這 4 個函數的語法格式。 內蒙古科技大學畢業(yè)設計 說明書 (畢業(yè) 論文 ) 19 表 htons 等函數語法要點 所需頭文件 include i/ 函數原型 uint16_t htons(unit16_t host16bit) uint32_t htonl(unit32_t host32bit) uint16_t ntohs(unit16_t 16bit) uint32_t ntohs(unit32_t 32bit) 函數傳入值 host16bit:主機字節(jié)序的 16bit 數據 host32bit:主機字節(jié)序的 32bit 數據 16bit:網絡字節(jié)序的 16bit 數據 32bit:網絡字節(jié)序的 32bit 數據 函數返回值 成功:返回要轉換的字節(jié)序 出錯: 注意 :調用該函數只是使其得到相應的字節(jié)序,用戶不需清楚該系統(tǒng)的主機字節(jié)序和網絡字節(jié)序是否真正相等。如果是相同不需要轉換的話,該系統(tǒng)的這些函數會定義成空宏。 地址格式轉化 (1)函數說明 通常用戶在表達地址時采用的是點分十進制表示的數值 (或者是以冒號分開的十進制 IPv6 地址 ),而在通常使用的 socket 編程中所使用的則是二進制值,這就需要將這兩個數值進行轉換。這里在 IPv4 中用到的函數有 i_aton、 i_addr 和 i_ntoa,而 IPv4 和 IPv6 兼容的函數有 i_pton 和 i_ntop。由于 IPv6 是下一代互聯網的標準協(xié)議,因 此本系統(tǒng)使用 IPv4 為例 協(xié)議 。這里 i_pton 函數是將點分十進制地址映射為二進 制地址,而 i_ntop 是將二進制地址映射為點分十進制地址。 (2)函數格式 表 列出了 i_pton 函數的語法要點。 表 i_pton函數語法要點 內蒙古科技大學畢業(yè)設計 說明書 (畢業(yè) 論文 ) 20 所需頭文件 include arpa/ 函數原型 int i_pton(int family,const char *strptr, void *addrptr) 函數傳入值 Family AF_INET: IPv4 協(xié)議 AF_INET6: IPv6 協(xié)議 strptr:要轉化的值 addrptr:轉化后的地址 函數返回值 成功: 0 出錯: 1 表 列出了 i_ntop 函數的語法要點。 表 i_ntop 函數語法要點 所需頭文件 include arpa/ 函數原型 int i_ntop(int family, void *addrptr, char *strptr, size_t len) 函數傳入值 family AF_INET6: IPv6 協(xié)議 AF_INET: IPv4 協(xié)議 addrptr:轉化后的地址 strptr:要轉化的值 Len:轉化后值的大小 函數返回值 成功: 0 出錯: 1 連 接函數的說明 連 接的流程圖 在客戶 /服務器模型中,多個相互通信的計算機都作為客戶端,與網絡服務器進行連接,并通過服務器進行信息的傳遞。所以多個客戶端之間的通信就變?yōu)榱丝蛻舳伺c服務端的通信。所以,采用客戶 /服務器模型進行網絡聊天需要分別編寫服務器端和客戶端的程序,服務器和客戶端之間相互通信的同步關系和各自的程序流程如實驗圖 所示。 內蒙古科技大學畢業(yè)設計 說明書 (畢業(yè) 論文 ) 21 圖 使用 TCP 協(xié)議 socket 編程流程圖 函數格式 (1)Socket() 作用: socket 函數為客戶機或服 務器創(chuàng)建一個 sokcet 格式: int socket(int family,int type,int protocol)。 參數說明: Family:表示地址族,可以去 AF_UNLX 和 AF_INT。 其中, AF_UNLX 只能夠用于單一的 UNIX 系統(tǒng)進程間通信 。AF_INT 是針對 Inter的,因而可以允許在遠程主機之間通信,實驗中使用 AF_INT。 Type:網絡程序所采用的通信協(xié)議,可以取 SOCK_STREAM 或 SOCK_DGRAM。其中, SOCK_STREAM 表明使用的是 TCP 協(xié)議,這樣提供按順序的、可靠的、雙向、面向連接的比特流; SOCKE_DGRAM 表明使用的是 UDP 協(xié)議,這樣只會提供定長、不可靠、無連接的通信。 (2)bind( ) 格式: int bind(int sockfd,struct sockaddr *addr,int addrlen)。 參數說明: Sockfd: socket 的文件描述符號。 Sockaddr:表示名字所用的一個數據結構,用來保存地址 (包括 IP 地址和端口 )。 內蒙古科技大學畢業(yè)設計 說明書 (畢業(yè) 論文 ) 22 Addrlen:設置結構大小長度。 (3) listen() 格式: int listen(int sockfd, int backlog)。 作用:監(jiān)聽連接信號,和 accepted 函數合同。 參數說明: Sockfd:表示 socket 調用返回的文件描述符。 Backlog:表示接入隊列允許的連接數目,大多數系統(tǒng)允許 20 個,也可以子定義 5~10 個。 (4) accept() 格式: Int accept (int sockfd, void *addr, int *addrlen)。 作用:與 listen 函數合用,監(jiān)聽信息、接收客戶端請 求。 參數說明: Sockfd:表示 socket 的文件描述符。 Addr:表示指向局部的數據結構 struct sockaddrin 的指針。 Addrlen:表示地址的長度。 (5) connect() 格式: int connect( int sockfd , struct sockaddr *serv_addr , int addrlen)。 作用:在面向連接的系統(tǒng)中客戶及連接服務器時使用, connect 必須在 bind 后使用。 參數作用: Sockfd:表示 socket 的文件描述符 。 Servaddr:表示村訪目的端口和 ip 地址 (套接字 )的數據結構。 (6) send() 和 recv() 格式 1: Int send (int sockfd, const vod *msg,int len, int flags)。 功能:發(fā)送信息。 格式 2: Int recv (int sockfd , void *buf,int len, usigned int flags)。 作用:用于流式 socket、數據報 socket 內部之間的通信。 (7) close( ) 格式: Close( int sockfd)。 內蒙古科技大學畢業(yè)設計 說明書 (畢業(yè) 論文 ) 23 第四章 Linux 網絡聊天室 socket 編程實現過程 聊天室 Socket 編程連接的過程 監(jiān)聽連接 利用 socket、 bind、 listen 建立連接,步驟是: (1)先用 socket 函數初始化 socket,創(chuàng)建新的 sock_fd。 sock_fd=socket(AF_INET,SOCK_STREAM,0)。 (2)此步驟涉及到 IP 地址及其處理過程。 參數說明: i_addr 函數 INADDR_ANY 該函數把由小數點分開的十進制 IP 地址轉為 unsinged long 類型, 而在實驗中所使用的為 INADDR_ANY,使用利用自已的 IP 地址自動填充。 (3)利用 bind 函數綁定端口和 IP 地址。 =AF_INET。 /*將地址族類型設定好 */ =htons(port)。 /* 將端口給其賦值 */ i_pton(AF_INET,ip_buf,amp。)。 /*用連接地址自動填充 ip*/ rst = connect(sock_fd,(void*)amp。pin,sizeof(pin))。/*sock_fd 是分配的 socket 名字, pin則便是分配好的端口與 IP,用 bind 綁定 */。 (4)利用 listen 監(jiān)聽請求 listen(listen_fd,T_MAX)。 發(fā)送請求 (1)獲取主機信息。 (2)初始化 socket 端口。 (3)利用 connect 函數將自己的 IP 地址等信息發(fā)送到主機,等待主機調用 accept 函數來接受請求。 主機接收請求,進行數據通信 (1)主機利用 accept 接收請求。 (2)創(chuàng)建子進程,顯示歡迎信息; (3)接收返回信息, 顯示連接成功,并 退 出連接; 內蒙古科技大學畢業(yè)設計 說明書 (畢業(yè) 論文 ) 24 (4)關閉客戶端口 socket 以上的過程總結為 服務器端應用程序在一個端口監(jiān)聽對服務的請求 ,也就是說 ,服務 線 程一直處于休眠狀態(tài) ,直到有一個客戶對這個服務提出了連接請求 ,此時服務線程被“喚醒”并為客戶提供服務 ,即對客戶的請求做出適當的反應 [18 ] 。 接著自己繼續(xù)監(jiān)聽, 新建的線程執(zhí)行完畢,自動關閉連接,釋放資源。這樣就實現了 socket通訊,如圖 。 服務器 客戶端 圖 單個客戶端 socket 連接 聊天室程序 設計 及界面 服務器的啟動 首先,在命令行輸入 make 命令編譯各個文件,如下圖 所示 : Makefile 文件把系統(tǒng) 需要編譯的文件按照依賴的先后順序進行編譯。 圖 make 編譯界面 內蒙古科技大學畢業(yè)設計 說明書 (畢業(yè) 論文 ) 25 其次在命令行輸入 ./serverv3, 服務器則啟動,一直等待客戶登陸為其服務,直到退出為止,這樣就 屬于 日常的服務器需要維護,暫不能登錄聊天室。服務器啟動如圖 所示。 圖 服務器啟動界面 服務器 主函數 代碼如下所示: int main() { struct sockaddr_in sin。 struct sockaddr_in pin。 int listen_fd。 int conn_fd。 socklen_t address_size=sizeof(pin)。 char str[INET_ADDRSTRLEN]。 int i=0。 int len。 int ret。 int n。 node *ptr。 pthread_t tid[T_MAX]。 //1個客戶連接生成 1個 thread, 用于存放各個連接對應的 ThreadId //signal這里則是為 了忽略來自客戶端退出時系統(tǒng)發(fā)出的自動退出信號 signal(SIGPIPE,SIG_IGN)。 signal(SIGCHLD,SIG_IGN)。 //給 head開辟空間 head=(node *)mall
點擊復制文檔內容
公司管理相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1