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

正文內(nèi)容

基于linux網(wǎng)絡(luò)聊天室的設(shè)計_畢業(yè)設(shè)計論文(編輯修改稿)

2024-10-02 15:24 本頁面
 

【文章內(nèi)容簡介】 連接。 connect()函數(shù)原型為 :int connect ( int sockfd, struct sockaddrserv_addr, int addrlen) 。sockfd 是目的服務(wù)器的 socket 描述符 。 serv_addr是包含目的機 IP 地址和端口號的指針 , addrlen 為結(jié)構(gòu)的大小。遇到錯誤時返回 1, 并且 errno 中包含相應(yīng)的錯誤碼。進行客戶端程序設(shè) 計無須調(diào)用 bind(), 因為這種情況下只需知道目的機器的 IP 地址 , 而客戶通過哪個端口與服務(wù)器建立連接并不需要關(guān)心 , 內(nèi)核會自動選擇一個未被占用的端口供客戶端來使用。 ( 4) 步驟 4: 監(jiān)聽連接 listen()在服務(wù)器端程序中 , 當 socket 與某一端口捆綁以后 , 就需要監(jiān)聽該端口 , 以便對到達的服務(wù)請求加以處理。 int listen( int sockfd, int backlog) 。sockfd 是 Socket 系統(tǒng)調(diào)用返回的 socket 描述符 。backlog 指定在請求隊列中允許的最大請 求數(shù) , 進入的連接請求將在隊列中等待 accept()它們。 backlog 對隊列中等待服務(wù)的請求的 數(shù)目進行了限制 , 對于小型服務(wù)器 , 隊列長度應(yīng)該為 5 或是稍大一些的值 , 而對于網(wǎng)站服務(wù)器 , 我們就需要更大的值 , 比如說 16 或是更大。當 listen 遇到錯誤時返回 1, errno 被置為相應(yīng)的錯誤碼。 ( 5) 步驟 5: 連接端口的服務(wù)請求 當某個客戶端試圖與服務(wù)器監(jiān)聽的端口連接時 ,該連接請求將排隊等待服務(wù)器 accept()它。通過調(diào)用 accept()函數(shù)為其建立一個連接 , accept()函數(shù)將返回一個新的 socket 描述符 , 來供這個新連接來使用。而服務(wù)器可以繼續(xù)在以前的那個 socket 上監(jiān)聽 , 同時可以在新的 socket 描述符上進行數(shù)據(jù)send ()( 發(fā)送 ) 和 recv()( 接收 ) 操作。 int accept( int sockfd, void addr, int addrlen) 。 sockfd 是被監(jiān)聽的 socket 描述符 , addr 通常是一個指向 sockaddr_in 變量的指針 , 該變量用來存放提出連接請求服務(wù)的主機的信息 ( 某臺主機從某個端口發(fā)出該請求 ) 。 addrlen 通常為一個指向值為 sizeof( struct sockaddr_in) 的整型指針變量。錯誤發(fā)生時返回一個 1 并且設(shè)置相應(yīng)的errno 值。 accept()之前 , 通常將 addrlen 初始化為 0。 ( 6) 步驟 6: 數(shù)據(jù)傳輸 send()和 recv() send()和 recv()這兩個函數(shù)是用于面向連接的 socket 上進行數(shù)據(jù)傳輸。 send()函數(shù)原型為 : int send ( int sockfd, const void msg, int len, intflags) 。 sockfd 是想用來傳輸數(shù)據(jù)的 socket 描述符 , msg是一個指向要發(fā)送數(shù)據(jù) ( 可以是字符型、整型、浮點型等 ) 的指針。 len 是以字節(jié)為單位的數(shù)據(jù)的長度。flags 一般情況下置為 0。 send()函數(shù)返回實際上發(fā)送出的字節(jié)數(shù) , 可能會少于希望發(fā)送的數(shù)據(jù)。所以需要對 send()的返回值進行測量。當 send()返回值與 len 不匹配時 , 應(yīng)該對這種情況進行處理。 recv()函數(shù)原型為 : int recv ( int sockfd, void buf, int len, unsignedint flags) 。 sockfd 是接收數(shù)據(jù)的 socket 描述符 。 buf 是存放接收數(shù)據(jù)的緩沖區(qū) 。 len 是緩沖的長度。 flags 也被置為 0。 recv()返回實際上接收的字節(jié)數(shù) , 或當出現(xiàn)錯誤時 ,返回 1 并置相應(yīng)的 errno 值。 ( 7) 步驟 7: 關(guān)閉連接 close() 當所有的數(shù)據(jù)操作結(jié)束以后 , 可以調(diào)用 close()函數(shù)來釋放該 socket, 從而停止在該 socket 上的任何數(shù)據(jù)操作。 摘要 : 在 Linux 下開發(fā)高性能的網(wǎng)絡(luò)通信程序 , 是充分發(fā)揮 Linux 網(wǎng)絡(luò)特性的一個關(guān)鍵因素 。 Socket 接口是 TCP /IP 網(wǎng)絡(luò)最為通用的 API, Socket 在計算機中提供了一個通信端口 , 可以通過這個端口與任何一個具有 Socket 接口的計算機通信。 Socket 接口上 TCP/IP 網(wǎng)絡(luò)應(yīng)用程序接口( API),它提供了許多函數(shù)和例程,程序員可以使用它們來開發(fā) TCP/IP 網(wǎng)絡(luò)應(yīng)用程序。 2 Socket 使用 Socket 接口進行網(wǎng)絡(luò)通信的過程如圖 13 所示,簡要步驟如下: (1) 建立一個 Socket. (2) 按要求配置 socket,將 socket 連接到遠程主機或給 socket 指定以各本地協(xié)議端口。 (3) 按要求通過 socket 發(fā)送和接受數(shù)據(jù)。 (4) 關(guān)閉此 socket。 這是通過 Socket 實現(xiàn)點對點通信需要掌握的 4 個編程要點。 多線程的概念 上述點對點通信的實現(xiàn)知識完成了主機進程與服務(wù)器進程之間的連接,建立連接的進程之間是一對一的聯(lián)系,即主機的一個進程與服務(wù)器的一個進程之間建立的連接。而每個進程進行通信的環(huán)節(jié)都包括了發(fā)送信息和接口信息兩個任務(wù),這兩個任務(wù)通過一個端口地址發(fā)送和接收。 對于多個并發(fā)的任務(wù)需要創(chuàng)建多個線程或線程去實現(xiàn)。使用一個進程去完成發(fā)送信息是沒有問題的,因為發(fā)送總是主動的;而使用同一個進 程再去完成接受信息去不一定會成功,因為接受信息是被動的,所以當沒有信息可以接收時,該進程就會被阻塞,從而導(dǎo)致發(fā)送任務(wù)也一起被阻塞。同一個端口的發(fā)送和接收是兩個并發(fā)任務(wù),應(yīng)該由兩個不同的任務(wù)去分別完成信息的發(fā)送和接收。這樣,當接收信息任務(wù)因沒有信息而被阻塞時,不至于影響發(fā)送任務(wù)的執(zhí)行。 那么,發(fā)送和接收兩個任務(wù)是使用兩個進程還是兩個進程去完成呢? 在網(wǎng)絡(luò)通信中,端口地址是以進程為單位進程分配的,而一個進程與外界的消息發(fā)送與接收必須通過分配給它的同一個端口進行。因此,不能通過創(chuàng)建進程方式來解決上訴問題,因為兩個 進程會分別對應(yīng)兩個不同的端口,而發(fā)送和接收必須使用同一端口。線程不是資源分配的單位,所以如果使用兩個線程不會對線程分配新的端口。因此,本實驗需要使用兩個線程去分別完成發(fā)送和接收信息的任務(wù),這兩個線程共享其進程擁有的統(tǒng)一個端口地址。由于創(chuàng)建進程的進程本身會作為一個線程來調(diào)度,所以只需要再創(chuàng)建一個線程專門負責(zé)接 收信息就可以了。 因此,對于從每個客戶端發(fā)來的請求,服務(wù)器端都要創(chuàng)建相應(yīng)的線程去接收并處理;同理,對于客戶端而言,也要創(chuàng)建一個線程去讀取服務(wù)器端發(fā)來的信息。 3 系統(tǒng)實現(xiàn) Linux 提供的有關(guān) Socket 的系統(tǒng)調(diào)用 (1) Socket() 作用: socket 函數(shù)為客戶機或服務(wù)器創(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)絡(luò) 程 序 所采 用 的通 信 協(xié)議 , 可 以取 SOCK_STREAM 或SOCK_DGRAM。其中, SOCK_STREAM 表明使用的是
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1