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

正文內容

基于linux網絡聊天室的設計畢業(yè)設計論文(編輯修改稿)

2025-07-15 15:55 本頁面
 

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