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

正文內(nèi)容

基于linux網(wǎng)絡(luò)聊天室的設(shè)計(jì)3(編輯修改稿)

2025-07-15 16:47 本頁面
 

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