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

正文內(nèi)容

基于linux網(wǎng)絡(luò)聊天室的設(shè)計(jì)畢業(yè)設(shè)計(jì)論文-在線瀏覽

2025-08-05 15:55本頁(yè)面
  

【正文】 較低層協(xié)議, 如IP、ICMP 直接訪問(wèn)。3 Socket 通信過(guò)程與程序開(kāi)發(fā) Socket 通信過(guò)程 基于TCP 可靠連接的客戶與服務(wù)器連接進(jìn)程流程圖如圖2。客戶在建立Socket 后就可調(diào)用connect()和服務(wù)器建立連接。最后, 待數(shù)據(jù)傳送結(jié)束后, 雙方調(diào)用close()關(guān)閉Socket。Type 參數(shù)定義了套接口的類型, 包括SOCK_STREAM 和SOCK_DGRAM, SOCK_STREAM 指定為流套接口,SOCK_DGRAM指定為數(shù)據(jù)報(bào)套接口。socket()調(diào)用返回一個(gè)整型socket 描述符, 可以在后面的調(diào)用使用它, 當(dāng)其值為 1 時(shí), 說(shuō)明有錯(cuò)誤發(fā)生。為了像電話分配電話號(hào)碼一樣, 可以通過(guò)bind()為建立的套接口綁定一個(gè)名字———分配地址。int bind ( int sockfd, struct sockaddr _my_addr,int addrlen) 。 addrlen 常被設(shè)置為sizeof ( structockaddr) , 如果函數(shù)調(diào)用成功, 就返回0, 否則就返回為 1, 我們可以通過(guò)查看errno 的值來(lái)了解錯(cuò)誤的原因。 / 系統(tǒng)隨機(jī)選擇一個(gè)未被使用的端口號(hào) /=INADDR_ANY。同樣, 置為INADDR_ANY, 系統(tǒng)會(huì)自動(dòng)填入本機(jī)IP 地址。 遇到錯(cuò)誤時(shí)返回“ 1”并將errno 置為相應(yīng)的錯(cuò)誤號(hào)。( 3) 步驟3: 請(qǐng)求連接connect()當(dāng)客戶端綁定地址后, 發(fā)送請(qǐng)求連接信號(hào)connect()來(lái)與遠(yuǎn)端服務(wù)器建立一個(gè)TCP 連接。sockfd 是目的服務(wù)器的socket 描述符。遇到錯(cuò)誤時(shí)返回 1, 并且errno 中包含相應(yīng)的錯(cuò)誤碼。( 4) 步驟4: 監(jiān)聽(tīng)連接listen()在服務(wù)器端程序中, 當(dāng)socket 與某一端口捆綁以后, 就需要監(jiān)聽(tīng)該端口, 以便對(duì)到達(dá)的服務(wù)請(qǐng)求加以處理。sockfd 是Socket 系統(tǒng)調(diào)用返回的socket 描述符。backlog 對(duì)隊(duì)列中等待服務(wù)的請(qǐng)求的數(shù)目進(jìn)行了限制, 對(duì)于小型服務(wù)器, 隊(duì)列長(zhǎng)度應(yīng)該為5 或是稍大一些的值, 而對(duì)于網(wǎng)站服務(wù)器, 我們就需要更大的值, 比如說(shuō)16 或是更大。( 5) 步驟5: 連接端口的服務(wù)請(qǐng)求 當(dāng)某個(gè)客戶端試圖與服務(wù)器監(jiān)聽(tīng)的端口連接時(shí),該連接請(qǐng)求將排隊(duì)等待服務(wù)器accept()它。而服務(wù)器可以繼續(xù)在以前的那個(gè)socket 上監(jiān)聽(tīng), 同時(shí)可以在新的socket 描述符上進(jìn)行數(shù)據(jù)send ()( 發(fā)送) 和recv()( 接收) 操作。sockfd 是被監(jiān)聽(tīng)的socket 描述符, addr 通常是一個(gè)指向sockaddr_in 變量的指針, 該變量用來(lái)存放提出連接請(qǐng)求服務(wù)的主機(jī)的信息( 某臺(tái)主機(jī)從某個(gè)端口發(fā)出該請(qǐng)求) 。錯(cuò)誤發(fā)生時(shí)返回一個(gè) 1 并且設(shè)置相應(yīng)的errno 值。( 6) 步驟6: 數(shù)據(jù)傳輸send()和recv()send()和recv()這兩個(gè)函數(shù)是用于面向連接的socket 上進(jìn)行數(shù)據(jù)傳輸。sockfd 是想用來(lái)傳輸數(shù)據(jù)的socket 描述符, msg是一個(gè)指向要發(fā)送數(shù)據(jù)( 可以是字符型、整型、浮點(diǎn)型等) 的指針。flags一般情況下置為0。所以需要對(duì)send()的返回值進(jìn)行測(cè)量。recv()函數(shù)原型為:int recv ( int sockfd, void buf, int len, unsignedint flags) 。 buf 是存放接收數(shù)據(jù)的緩沖區(qū)。flags 也被置為0。( 7) 步驟7: 關(guān)閉連接close() 當(dāng)所有的數(shù)據(jù)操作結(jié)束以后, 可以調(diào)用close()函數(shù)來(lái)釋放該socket, 從而停止在該socket 上的任何數(shù)據(jù)操作。Socket 接口是TCP /IP 網(wǎng)絡(luò)最為通用的API, Socket 在計(jì)算機(jī)中提供了一個(gè)通信端口, 可以通過(guò)這個(gè)端口與任何一個(gè)具有Socket 接口的計(jì)算機(jī)通信。2 Socket使用Socket接口進(jìn)行網(wǎng)絡(luò)通信的過(guò)程如圖13所示,簡(jiǎn)要步驟如下:(1) 建立一個(gè)Socket.(2) 按要求配置socket,將socket連接到遠(yuǎn)程主機(jī)或給socket指定以各本地協(xié)議端口。(4) 關(guān)閉此socket。上述點(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)程之間建立的連接。 對(duì)于多個(gè)并發(fā)的任務(wù)需要?jiǎng)?chuàng)建多個(gè)線程或線程去實(shí)現(xiàn)。同一個(gè)端口的發(fā)送和接收是兩個(gè)并發(fā)任務(wù),應(yīng)該由兩個(gè)不同的任務(wù)去分別完成信息的發(fā)送和接收。那么,發(fā)送和接收兩個(gè)任務(wù)是使用兩個(gè)進(jìn)程還是兩個(gè)進(jìn)程去完成呢?在網(wǎng)絡(luò)通信中,端口地址是以進(jìn)程為單位進(jìn)程分配的,而一個(gè)進(jìn)程與外界的消息發(fā)送與接收必須通過(guò)分配給它的同一個(gè)端口進(jìn)行。線程不是資源分配的單位,所以如果使用兩個(gè)線程不會(huì)對(duì)線程分配新的端口。由于創(chuàng)建進(jìn)程的進(jìn)程本身會(huì)作為一個(gè)線程來(lái)調(diào)度,所以只需要再創(chuàng)建一個(gè)線程專門負(fù)責(zé)接收信息就可以了。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)。其中,AF_UNLX只能夠用于單一的UNIX系統(tǒng)進(jìn)程間通信。 Type:網(wǎng)絡(luò)程序所采用的通信協(xié)議,可以取SOCK_STREAM或SOCK_DGRAM。(2) bind( )格式: int bind(int sockfd,struct sockaddr *addr,int addrlen)。 Sockaddr:表示名字所用的一個(gè)數(shù)據(jù)結(jié)構(gòu),用來(lái)保存地址(包括IP地址和端口) Addrlen:設(shè)置結(jié)構(gòu)大小長(zhǎng)度。 作用:監(jiān)聽(tīng)連接信號(hào),和accepted函數(shù)合同。 Backlog:表示接入隊(duì)列允許的連接數(shù)目,大多數(shù)系統(tǒng)允許20個(gè),也可以子定義5~10個(gè)。 作用:與listen函數(shù)合用,監(jiān)聽(tīng)信息、接收客戶端請(qǐng)求。 Addr:表示指向局部的數(shù)據(jù)結(jié)構(gòu)struct sockaddrin的指針。(5) connect()格式: int connect( int sockfd , struct sockaddr *serv_addr , int addrlen)。 參數(shù)作用: Sockfd:表示socket的文件描述符。(6) send() 和 recv() 格式1: Int send (int sockfd, const vod *msg,int len, int flags)。 格式2: Int recv (int sockfd , void *buf,int len, usigned int flags)。(7) close( ) 和 shutdown ( )格式: Close( int sockfd)或 Int shutdown(int sockfd , int how)。(8) 有
點(diǎn)擊復(fù)制文檔內(nèi)容
規(guī)章制度相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1