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

正文內(nèi)容

基于linux操作系統(tǒng)的聊天軟件的設(shè)計(jì)畢業(yè)設(shè)計(jì)說(shuō)明書-在線瀏覽

2025-05-01 09:56本頁(yè)面
  

【正文】 和 充分利用早期的反饋 ,通過(guò)平衡的配置腦力資源 ,從而 開發(fā)出更優(yōu)秀的軟件。 首先服務(wù)器會(huì)初始化,然后等待客戶端的連接。 客戶端是注冊(cè)好了的,只需要登陸 。注銷時(shí)會(huì)把對(duì)應(yīng)的鏈表節(jié)點(diǎn)銷毀,并且刪除文件對(duì)應(yīng)信息??梢詫?shí)現(xiàn)用↑↓鍵選擇,然后按回車鍵進(jìn)入與其的私聊界面。而好友界面的倒數(shù)第二個(gè)為群聊選擇,當(dāng)進(jìn)入群聊時(shí),可以實(shí)現(xiàn)多人同時(shí)聊天。你的顯示好友界面里的那個(gè)客戶端就會(huì)消失,同時(shí),有人上線時(shí),會(huì)在好友欄加上新加的客戶端。 2 技術(shù)說(shuō) 明與方案選擇 通信方式 UDP 通信 UDP 是用戶數(shù)據(jù)報(bào)協(xié)議的簡(jiǎn)稱。它的特點(diǎn)是:無(wú)連接, 不能 提供的可靠的信道,但 正是因?yàn)?無(wú)連接 這個(gè)特點(diǎn)使 UDP 具有很好的傳輸效率。 TCP 在數(shù)據(jù)傳送之前必須先建立 相應(yīng)的 連接,數(shù)據(jù)傳送 完成 后 必須 釋放連接。 正是因?yàn)?TCP 要提供可靠的、面向連接的運(yùn)輸 等多樣的 服務(wù),所以增加了 額外的 系統(tǒng)開銷, 例如 確認(rèn)、流量 的 控制、計(jì)時(shí)器以及連接管理等 服務(wù) 都需要 消耗 許多系統(tǒng)資源。 圖 11 用三次握手建立 TCP連接 對(duì)于 計(jì)算機(jī) 連接的釋放過(guò)程也需要類似的 3 次握手的互相確認(rèn)的過(guò)程,如實(shí)驗(yàn)圖 12所示。 C/S 模型 C/S 模型將應(yīng)用程序分為 server 端和 client 端兩基本的部分, client 端對(duì) server 端發(fā)送請(qǐng)求, server 端對(duì)其作出相應(yīng)的回應(yīng)并開始提供服務(wù)。 server 端一直處于等待狀態(tài),當(dāng)一個(gè) client 端提出請(qǐng)求時(shí)。 通常, C/S 模型必須包含兩個(gè)獨(dú)立的應(yīng)用程序: client 端和 Server 端的應(yīng)用程序。所以 client 端 的通信 既可以理解為 client 端和 Server 端之間的通信。 圖 13 Socket通信流程圖 網(wǎng)絡(luò)套接字( socket)的概念 Socket 接口 是 TCP/IP 的 API,它提供了 相應(yīng)的功能函數(shù)與 例程, 我們 可以使用 對(duì)應(yīng)的函數(shù)與例程進(jìn)行 TCP/IP 應(yīng)用程序 的開發(fā)與維護(hù) 。 (3) 按要求通過(guò) Socket 套接字 發(fā)送和接受 相應(yīng)的 數(shù)據(jù) 與信息 。 以上就是 通過(guò) Socket 套接字來(lái) 實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn) 信息 通信 的 4 個(gè)編程 的核心 要點(diǎn)。 也正是因?yàn)?Red Hat 的方便性,安裝程序?qū)⑾到y(tǒng)的構(gòu)架或軟件安裝方式全部做了包裝,用戶學(xué)到的都是 GUI 界面(圖形用戶界面)上輸入一些設(shè)置值的粗淺知識(shí),至于軟件安裝了那些文件、安裝到哪個(gè)文件目錄、系統(tǒng)作了哪些設(shè)置,使用者則一無(wú)所知,一旦真正遇到系統(tǒng)程序發(fā)生問題時(shí),要解決問題也就比較困難。 Caldera 有自行研發(fā)的圖形界面的安裝程序向?qū)?,安裝過(guò)程可以玩俄羅斯方塊,提供完整的 KDE 桌面環(huán)境,附贈(zèng)功能強(qiáng)大的商業(yè)軟件,如 StarOffice、圖形界面的硬盤分割工具Partition Magic 等。 通過(guò)以上三種方案的比較,考慮適用性,和可操作性,選擇 Red hat Linux 操作系統(tǒng)。由于 去除了 UI 界面,使 vi 編輯器 效率 提高了 很 多 。 VI編輯器 在 Linux上的 重要性是與 Edit 在 DOS 上 的地位是 一樣。 加上紅帽子系統(tǒng)中自帶的 gcc編譯器 和 gdb 調(diào)試 工具,所以 Linux 系統(tǒng)目前最主流的開發(fā)工具。和 在 windows 下開發(fā) 基本相似。 通過(guò)以上兩種方案的比較,考慮適用性,和編程習(xí)慣,選擇方案一。而 對(duì)于每一個(gè) client 端服務(wù)器都要建立一個(gè)相應(yīng)的進(jìn)程去實(shí)現(xiàn)和 client 端的通信。 由于服務(wù)端 接受信息 的行為 是被動(dòng)的,當(dāng) 服務(wù)端 沒有信息可以接收時(shí),該進(jìn)程就 應(yīng)該自動(dòng)的 阻塞,發(fā)送任務(wù)也 應(yīng)該 一起被阻塞。這樣,當(dāng) 一個(gè) client 端的請(qǐng)求 被阻塞時(shí),不至于影響 其它的 client 端 的 正常工作 。 方案一 :多進(jìn)程, 數(shù)據(jù)共享 非常 復(fù)雜,需要用 IPC 處理 ;數(shù)據(jù)是分開 處理的 ,同步 比較簡(jiǎn)單 ;但是 內(nèi)存 耗的 多,切換 相應(yīng)的會(huì)比較 復(fù)雜, CPU 利用率低創(chuàng)建銷毀、切換復(fù)雜,速度慢 ;編程簡(jiǎn)單,調(diào)試簡(jiǎn)單; 適應(yīng)于多核、多機(jī)分布式;如果一臺(tái)機(jī)器不夠,擴(kuò)展到多臺(tái)機(jī)器比較簡(jiǎn)單 。 通過(guò)以上兩種方案的比較 ,考慮適用性,選擇多線程實(shí)現(xiàn)對(duì)客戶端的監(jiān)聽。通過(guò)該技術(shù),系統(tǒng)內(nèi)核首先會(huì)緩沖 I/O 數(shù)據(jù),當(dāng)某個(gè) I/O 準(zhǔn)備好后,系統(tǒng)自動(dòng)通知相應(yīng)的應(yīng)用程序去完成 I/O讀或?qū)懖僮鳎@樣應(yīng)用程序可以迅速的完成對(duì)應(yīng)的 I/O操作,因而系統(tǒng)不需要等待完成相應(yīng) I/O 操作,從而應(yīng)用程序設(shè)置阻塞。對(duì)于 client 端,一旦我們輸入了一行文字發(fā),系統(tǒng)會(huì) 自動(dòng)的讀取,進(jìn)而發(fā)送給系統(tǒng)內(nèi)的server 端,然后由 server 端反饋給對(duì)應(yīng)的目標(biāo) client 端。 這 允許進(jìn)程來(lái)決定 那個(gè)client 端 是可讀或?qū)懸粋€(gè)或多個(gè)文件而不 用 阻塞 的 。 實(shí)現(xiàn)這個(gè)設(shè)備 的 方法分 為下面的 兩步 : 1. 在一個(gè)或多個(gè)可指示查詢狀態(tài)變化的等待隊(duì)列上調(diào)用 poll_wait. 當(dāng) 文件描述符 不可以 可用來(lái)執(zhí)行 I/O 時(shí) , 內(nèi)核 將使 這個(gè)進(jìn)程在 處于等待狀態(tài),一旦又來(lái)可使用的文件描述符時(shí), . 驅(qū)動(dòng) 自動(dòng)的 通過(guò)調(diào)用函數(shù) poll_wait 增加一個(gè) 新的 等待隊(duì)列到 poll_table 結(jié)構(gòu),原型 : void poll_wait (struct file *, wait_queue_head_t *, poll_table *)。通常的做法是會(huì)返回( POLLLIN|POLLRDNORA) POLLRDBAND 如果可 以從設(shè)備讀出帶外數(shù)據(jù),就返回該值,它只可在 linux 內(nèi) 核的某些網(wǎng)絡(luò)代碼中使用,通常不用在設(shè)備驅(qū)動(dòng)程序中 POLLPRI 如果可 以無(wú)阻塞的讀取高優(yōu)先級(jí)(帶外)數(shù)據(jù),就返回該值,返回該值會(huì)導(dǎo)致 select 報(bào)告文件發(fā)生異常,以為 select 八帶外數(shù)據(jù)當(dāng)作異常處理 POLLHUP 當(dāng)讀設(shè) 備的進(jìn)程到達(dá)文件尾時(shí),驅(qū)動(dòng)程序必須返回該值,依照 select 的功能描述,調(diào)用 select 的進(jìn)程被告知進(jìn)程時(shí)可讀的。 POLLOUT 如果設(shè)備可以無(wú)阻塞地些,就返回該值 POLLWRNORM 設(shè)備已經(jīng)準(zhǔn)備好,可以寫了,就返回該值。fd_set39。 39。由于 在不同的平臺(tái)上 fd_set 類型的長(zhǎng)度 是 不同 的 ,因此 規(guī)定用一組標(biāo)準(zhǔn)的宏定義來(lái)處理此類變量 顯得尤其重要 : fd_set set。set)。set)。set)。set)。 在大多數(shù)情況下系統(tǒng)的責(zé)任 之一包括 檢查 fd_set 能包括任意值的文件描述符, 但是當(dāng)我們知道我們的文件描述符的多少時(shí) 你應(yīng)該檢查 /修改宏 FD_SETSIZE的值。 因?yàn)?有一些系統(tǒng)對(duì)多于 1024 個(gè)文件描述符的 fd_set 是存在 支持 的問 題 的 。 select 的基本接口 其實(shí)是非常的 簡(jiǎn)單 的 : int select(int nfds, fd_set *readset, fd_set *writeset, fd_set *exceptset, struct timeval *timeout)。 readset 用來(lái)檢查可讀性的一組文件描述符。 exceptset 用來(lái)檢查意外狀態(tài)的文件描述符。 (如果其中 tv_sec 和 tv_usec 都等于 0, 則文件描述符 的狀態(tài)不被影響,但函數(shù)并不掛起 ) 函數(shù)將返回響 應(yīng)操作的 總的響應(yīng)了的 描述符,且三組數(shù)據(jù)均在恰當(dāng)位置被修改,只有響應(yīng)操作的那一些沒有修改。 通過(guò)以上兩種方案的比較,考慮適用性,選擇調(diào)用 poll 函數(shù)實(shí)現(xiàn) I/O 多路復(fù)用。 參數(shù)說(shuō)明: family:表示地址族 ( IP地址) ,可以去 AF_UNLX 和 AF_INT。AF_INT 是 可以用于 Inter 的,因而可以允許在遠(yuǎn)程主機(jī)之間通信,實(shí)驗(yàn)中使用 AF_INT。其中, SOCK_STREAM 表明使用的是 TCP 協(xié)議,; SOCKE_DGRAM 表明使用的是 UDP 協(xié)議。 參數(shù)說(shuō)明: Sockfd: socket套接字的的文件描述符。 (3) listen() 格式: int listen(int sockfd, int backlog)。 參數(shù)說(shuō)明: Sockfd:表示調(diào)用返回的文件描述符。 (4) accept() 格式: Int accept (int sockfd, void *addr, int *addrlen)。 參數(shù)說(shuō)明: sockfd:表示 socket 的文件描述符。 addrlen:表示地址的長(zhǎng)度。 作用:在面向連接的系統(tǒng)中 client 端連接 server 端時(shí)使用, connect 必須在 bind 后使用。 servaddr:表示村訪目的端口和 ip 地址(套接字)的數(shù)據(jù)結(jié)構(gòu)。 功能:發(fā)送信息。 作用:用于流式 socket、數(shù)據(jù)報(bào) socket 內(nèi)部之間的通信。 參數(shù)說(shuō)明: How的值為下面一種: 0不允許繼續(xù)接收; 1不允許繼續(xù)發(fā)送; 2不允許繼續(xù)發(fā)送和接收。 Sockfd = socket( AF_INT, SOCK_STREAM,0) 2) 此步驟涉及到 IP 地址及其處理過(guò)程。 a) 利用 bind 函數(shù)綁定端口和 IP 地址。 /*將地址族類型設(shè)定好 */ =htons(MYPORT) 。 /*用連接地址自動(dòng)填充 ip*/ Bind(sockfd,(stuct sockaddr*)amp。 /*sockfd 是分配的 socket 名字, myaddr 則便是分配好的端口與 IP,用 bind 綁定 */ b) 利用 listen 監(jiān)聽請(qǐng)求 (2) 發(fā)送請(qǐng)求 1) 先用 socket 函數(shù)初始化 socket,創(chuàng)建新的 sockfd。 3)利用 connect 函數(shù)將自己的 IP 地址等信息發(fā)送到主機(jī),等待主機(jī)調(diào)用 accept 函數(shù)來(lái)接受請(qǐng)求。 2)創(chuàng)建子進(jìn)程,顯示歡迎信息; 3)接收返回信息,顯示連接成功,并退出連接; 4)關(guān)閉客戶端口 socket; Linux 下的聊天軟件涉及的一個(gè) server 端 和多個(gè) client 端 .client 端向 server 端發(fā)送請(qǐng)求, server 端對(duì)請(qǐng)求作出響應(yīng) .client 端嘗試與 server 端建立連接 .一旦連接建立起來(lái), client 端和 server 端就可以通過(guò) socket 套節(jié)字進(jìn)行通信 .本系統(tǒng)中 ,主要有兩個(gè)應(yīng)用程序 ,分別為 server 端程序和 client 端, client 端主要是用于消息轉(zhuǎn)發(fā)、客戶登陸信息的管理以及向所有用戶發(fā)送系統(tǒng)消息等。 圖 31 C/S體系結(jié)構(gòu)圖 其大致實(shí)現(xiàn)模型是: ( 1) server 端設(shè)置一個(gè)固定的端口號(hào) .一旦 server 端啟動(dòng) ,既使用 ListenThread 線程對(duì)端口進(jìn)行不間斷監(jiān)聽 .如果 client 端請(qǐng)求一個(gè)連接, server 端使用 accept()方法打開一個(gè) socket 連接 . ( 2)客戶在 host 和 port 端口建立連接 . ( 3) server 端和 client 端使用 InputStream 和 OutputStream 進(jìn)行通信 . . 結(jié)構(gòu)流程 . server 端結(jié)構(gòu)流程圖 server端通過(guò) socket()系統(tǒng)調(diào)用創(chuàng)建一個(gè) Socket數(shù)組后 (即設(shè)定了接受連接客戶的最大數(shù)目 ),與指定的本地端口綁定 bind(),就可以 在端口進(jìn)行 listen().如果有 client 端連接請(qǐng)求,則在數(shù)組中選擇一個(gè)空 Socket,將 client 端 地址賦給這個(gè) 成功的客戶就可以在 server 端上聊天了。 server 端與客戶都通過(guò)調(diào)用 recv()和send()來(lái)實(shí)現(xiàn)相互的通信,然后雙方通過(guò)該通信方式來(lái)相互傳遞信息,一旦收到客戶方的連接請(qǐng)求, server 端 accept()方法返回一個(gè)新建的 Socket 對(duì)象。 圖 33 客戶端結(jié)構(gòu)流程圖 登錄結(jié)構(gòu)流程圖 用 戶登錄,首先要有一個(gè)提供用戶登錄的存儲(chǔ)方式。在實(shí)際的應(yīng)用中,可以這樣設(shè)計(jì),如果用戶沒有登錄,則在頁(yè)面中顯示用戶登錄的選項(xiàng),用戶登錄后,則可隱藏用戶登錄的界面,并且顯示登陸成功后的其他信息。網(wǎng)絡(luò)聊天需要很高的穩(wěn)定性和安全性,因此對(duì)用戶名不允許重復(fù)使用。 圖 34 登錄結(jié)構(gòu)流程圖 4 運(yùn)行效果 (1) 在編寫 完 TCP 服務(wù)端程序 后,編寫一個(gè) Makefile 文件: all: gcc ../ *.c lpthread Wall rm touch 執(zhí)行 make。 (3) 在主機(jī)上打開一窗口,運(yùn)行 server。 (5) 再打開另一個(gè)窗口,運(yùn)行 client 10
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1