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

正文內(nèi)容

課程設計---基于linux網(wǎng)絡聊天室的設計(編輯修改稿)

2024-12-22 17:37 本頁面
 

【文章內(nèi)容簡介】 《基于 Linux 網(wǎng)絡聊天室的設計 》 第 8 頁 共 21 頁 上述點對點通信的實現(xiàn)知識完成了主機進程與服務器進程之間的連接,建立連接的進程之間是一對一的聯(lián)系,即主 機的一個進程與服務器的一個進程之間建立的連接。而每個進程進行通信的環(huán)節(jié)都包括了發(fā)送信息和接口信息兩個任務,這兩個任務通過一個端口地址發(fā)送和接收。 對于多個并發(fā)的任務需要創(chuàng)建多個線程或線程去實現(xiàn)。使用一個進程去完成發(fā)送信息是沒有問題的,因為發(fā)送總是主動的;而使用同一個進程再去完成接受信息去不一定會成功,因為接受信息是被動的,所以當沒有信息可以接收時,該進程就會被阻塞,從而導致發(fā)送任務也一起被阻塞。同一個端口的發(fā)送和接收是兩個并發(fā)任務,應該由兩個不同的任務去分別完成信息的發(fā)送和接收。這樣,當接收信息任務因沒有信 息而被阻塞時,不至于影響發(fā)送任務的執(zhí)行。 那么,發(fā)送和接收兩個任務是使用兩個進程還是兩個進程去完成呢? 在網(wǎng)絡通信中,端口地址是以進程為單位進程分配的,而一個進程與外界的消息發(fā)送與接收必須通過分配給它的同一個端口進行。因此,不能通過創(chuàng)建進程方式來解決上訴問題,因為兩個進程會分別對應兩個不同的端口,而發(fā)送和接收必須使用同一端口。線程不是資源分配的單位,所以如果使用兩個線程不會對線程分配新的端口。因此,本實驗需要使用兩個線程去分別完成發(fā)送和接收信息的任務,這兩個線程共享其進程擁有的統(tǒng)一個端口地址。由于創(chuàng)建進程的 進程本身會作為一個線程來調(diào)度,所以只需要再創(chuàng)建一個線程專門負責接收信息就可以了。 因此,對于從每個客戶端發(fā)來的請求,服務器端都要創(chuàng)建相應的線程去接收并處理;同理,對于客戶端而言,也要創(chuàng)建一個線程去讀取服務器端發(fā)來的信息。 《基于 Linux 網(wǎng)絡聊天室的設計 》 第 9 頁 共 21 頁 3 系統(tǒng) 設計 系統(tǒng)結(jié)構(gòu)設計 本系統(tǒng)采用客戶 /服務器模型, 在 TCP/IP 網(wǎng)絡應用中,通信的兩個進程間相互作用的主要模式是客戶 /服務器模式( Client/Server model),即客戶向服務器發(fā)出服務請求,服務器接收到請求后,提供相應的服務??蛻?/服務器模式的建立基于以下兩點:首 先,建立網(wǎng)絡的起因是網(wǎng)絡中軟硬件資源、運算能力和信息不均等,需要共享,從而造就擁有眾多資源的主機提供服務,資源較少的客戶請求服務這一非對等作用。其次,網(wǎng)間進程通信完全是異步的,相互通信的進程間既不存在父子關系,又不共享內(nèi)存緩沖區(qū),因此需要一種機制為希望通信的進程間建立聯(lián)系,為二者的數(shù)據(jù)交換提供同步,這就是客戶端 /服務器模式的 TCP/IP。在客戶 /服務器模型中,多個相互通信的計算機都作為客戶端,與網(wǎng)絡服務器進行連接,并通過服務器進行信息的傳遞 [4]。所以多個客戶端之間的通信就變?yōu)榱丝蛻舳伺c服務端的通信 。 服務 器 端和客戶端的主要組成如下: 服務器 端:套接字創(chuàng)建函數(shù) Socket(),端口綁定函數(shù) Bind(),套接口監(jiān)聽函數(shù) Listen(),接受連接函數(shù) Accept(),數(shù)據(jù)收發(fā)函數(shù) Read()和 Write(),以及套接口關閉函數(shù) Close()。 客戶端:套接口創(chuàng)建函數(shù) Socket(),套接口連接函數(shù) Connect(),數(shù)據(jù)收發(fā)函數(shù) Read()和 Write(),以及套接口關閉函數(shù) Close()。 首先運行 服務器端 程序,通過 Socket()函數(shù)會建立一個套接字,然后通過 Bind()函數(shù)綁定一個端口,然后 調(diào)用 Listen()在套接字指定的端口上開始傾聽,利用 Accept()從完全建立連接的隊列中接受一個連接,連接獲得后使用 Read()和 Write()函數(shù)進行通信。通信結(jié)束后調(diào)用 Close()關閉套接字描述符。 運行客戶端的程序,調(diào)用 Socket()函數(shù)建立一個套接字,使用 Connect()函數(shù)與服務器端進行連接,連接完成后,使用 Write()和 Read()與服務器端進行通信,通信結(jié)束后調(diào)用 close()關閉套接字描述符。 《基于 Linux 網(wǎng)絡聊天室的設計 》 第 10 頁 共 21 頁 4 系統(tǒng)實現(xiàn) 相關函數(shù) (1)Socket() 作用: socket 函數(shù) 為客戶機或服務器創(chuàng)建一個 sokcet 格式: int socket(int family,int type,int protocol)。 參數(shù)說明: Family:表示地址族,可以去 AF_UNLX 和 AF_INT。 其中, AF_UNLX 只能夠用于單一的 UNIX 系統(tǒng)進程間通信 。AF_INT 是針對 Inter 的,因而可以允許在遠程主機之間通信,實驗中使用 AF_INT。 Type:網(wǎng)絡程序所采用的通信協(xié)議,可以取 SOCK_STREAM 或 SOCK_DGRAM。其中,SOCK_STREAM 表明使用的是 TCP 協(xié)議,這樣提供按順序、可靠、雙向、面向連接的比特流;SOCKE_DGRAM 表明使用的是 UDP 協(xié)議,這樣只會提供定長、不可靠、無連接的通信。 (2)bind( ) 格式: int bind(int sockfd,struct sockaddr *addr,int addrlen)。 參數(shù)說明: Sockfd: socket 的文件描述符號。 Sockaddr:表示名 字所用的一個數(shù)據(jù)結(jié)構(gòu),用來保存地址 (包括 IP 地址和端口 ) Addrlen:設置結(jié)構(gòu)大小長度。 (3)listen() 格式: int listen(int sockfd, int backlog)。 作用:監(jiān)聽連接信號,和 accepted 函數(shù)合同。 參數(shù)說明: Sockfd:表示 socket 調(diào)用返回的文件描述符。 Backlog:表示接入隊列允許的連接數(shù)目,大多數(shù)系統(tǒng)允許 20 個,也可以子定義 5~ 10 個。 (4)accept() 格式: 《基于 Linux 網(wǎng)絡聊天室的設計 》 第 11 頁 共 21 頁 Int accept (int sockfd, void *addr, int *addrlen)。 作用:與 listen 函數(shù)合用,監(jiān)聽信息、接收客戶端請求。 參數(shù)說明: Sockfd:表示 socket 的文件描述符。 Addr:表示指向局部的數(shù)據(jù)結(jié)構(gòu) struct sockaddrin 的指針。 Addrlen:表示地址的長度。 (5)connect() 格式: int connect( int sockfd , struct sockaddr *serv_addr , int addrlen)。 作用:在面向 連接的系統(tǒng)中客戶及連接服務器時使用, connect 必須在 bind 后使用。 參數(shù)作用: Sockfd:表示 socket 的文件描述符。 Servaddr:表示村訪目的端口和 ip 地址(套接字)的數(shù)據(jù)結(jié)構(gòu)。 (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、數(shù)據(jù)報 socket 內(nèi)部之間的通信。 (7)close( ) 和 shutdown ( ) 格式: Close( int sockfd) 或 Int shutdown(int sockfd , int how)。 參數(shù)
點擊復制文檔內(nèi)容
高考資料相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1