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

正文內容

某學校機房管理系統(tǒng)的設計與實現(xiàn)(編輯修改稿)

2025-05-15 06:50 本頁面
 

【文章內容簡介】 在功能上也是互補的。只有兩者的結合,才能保證 Inter 在復雜的環(huán)境下正常運行。凡是要連接到 Inter 的計算機,都必須同時安裝和使用這兩個協(xié)議,因此在實際中常把這兩個協(xié)議統(tǒng)稱作 TCP/IP 協(xié)議。 Socket 技術 Socket 基本概念20 世紀 80 年代初,美國政府的高級研究機構(ARPA)給加利福尼亞大學Berkeley 分校提供資金,讓他們在 UNIX 操作系統(tǒng)下實現(xiàn) TCP/IP 協(xié)議。在這個項目中,研究人員為 TCP/IP 網(wǎng)絡通信開發(fā)了 API(應用程序接口) 。這個 API稱為 Socket 接口。如今 Socket 接口是 TCP/IP 網(wǎng)絡最為通用的 API,也是在Inter 上進行應用開發(fā)最為通用的 API。Inter 是有不同種類的網(wǎng)絡互連而成,實現(xiàn)不同網(wǎng)絡及計算機之間交互操作的關鍵問題是由 TCP/IP 協(xié)議來解決的。TCP/IP 協(xié)議的核心是傳輸層協(xié)議(TCP 和 UDP) 、網(wǎng)絡層協(xié)議(IP)和網(wǎng)絡接口層,前兩層在操作系統(tǒng)內核中實現(xiàn)。操作系統(tǒng)內核是不能直接為一般用戶所感受到的,一般用戶感受到的只有應用程序(包括系統(tǒng)應用程序) ,即各種應用程序構成了操作系統(tǒng)的用戶視圖。兩者之間的接口是網(wǎng)絡編程界面(程序員界面) 。因此,TCP/IP 網(wǎng)絡環(huán)境下的應用程序也不是直接與 TCP/IP 核心打交道,而是與網(wǎng)絡應用編程接口(套接字,socket)打交道,編程接口構成了核心協(xié)議的用戶視圖。實際上,Socket 在計算機中提供了一個通信端口,可以通過這個端口與任何一個具有 Socket 接口的計算機通信。應用程序在網(wǎng)絡上傳輸,接收的信息都通過這個 Socket 接口來實現(xiàn)。在應用開發(fā)中,就像使用文件句柄一樣,可以對Socket 句柄進行讀、寫操作??梢园?Socket 看成是一根連接線,當在兩臺計 591 論文網(wǎng) 算機之間建立了一個 Socket 之后,兩臺計算機就可以通過這根連接線來完成信息交互,所做的僅僅是向這根連接線里寫入數(shù)據(jù),再從其中讀出數(shù)據(jù),而不必擔心會不會由信息丟失,Socket 會負責照看好數(shù)據(jù)。Socket 用于表達兩臺機器之間的連接‘終端’ 。一個網(wǎng)絡應用涉及兩臺(或兩臺以上)不同主機中跨網(wǎng)絡彼此通信的兩個進程。這兩個進程通過經由各自的套接字(Socket)發(fā)送和接收消息彼此通信。對于一個給定的連接,每臺機器上都有一個套接字。有點像我們打電話,用電纜把電話連接起來,中間的物理結構和具體實現(xiàn)過程我們不必了解,只要我們能進行通話即可。套接字是單臺主機內應用層和傳輸層之間的接口。套接字也用于指代應用程序和網(wǎng)絡之間的應用程序接口(application program interface,簡稱 API) ,因為它又是用于構造互聯(lián)網(wǎng)中的網(wǎng)絡應用程序的編程接口。當我們進行編程時,需要用到 Socket 接口,Socket 接口定義了許多函數(shù)或例程,我們可以直接調用它們實現(xiàn)網(wǎng)絡連接、通信等功能。Socket 接口為我們建立通信信道,我們可以通過這條通道來與一臺或多臺計算機進行連接。套接字屏蔽了底層通信軟件和具體操作系統(tǒng)的差異,使得任何兩臺安裝了TCP 協(xié)議軟件和實現(xiàn)了套接字規(guī)范的計算機之間的通信成為可能。對于應用程序來說,它就像一個服務協(xié)議插座一樣,各種不同的協(xié)議,對應不同的端口。我們可以把套接字看作相應進程上的“門”:進程把消息發(fā)送到網(wǎng)絡或從網(wǎng)絡接收消息都得經過自身得套接字。當一個進程想給另一臺主機中的另一個進程發(fā)送消息是,它就把該消息推出自家的門。該進程認定在這扇門的另一側有一個傳輸設施會把這個消息傳輸?shù)侥康倪M程的門口。在服務器進程處于運行狀態(tài)的情況下,客戶進程就能夠初始化一個到服務器的 TCP 連接了,這是通過在客戶程序中創(chuàng)建一個套接字對象來完成的,當客戶創(chuàng)建了它的套接字對象的時候,它詳細說明了服務器進程的地址,也就是,服務器的 IP 地址和進程的端口號,一旦創(chuàng)建了套接字對象,客戶端的 TCP 就發(fā)起一個三次握手,并建立一個和服務器的 TCP 連接,三次握手對客戶和服務器程序來說是完全透明的。 Socket 類型及規(guī)范可以提供給用戶使用的套接字有兩種,它們分別是數(shù)據(jù)報套接字和流式套接字:1)流式套接字(SOCKET_STREAM)提供了面向連接、雙向可靠的數(shù)據(jù)流傳輸服務,數(shù)據(jù)無出錯,無重復地發(fā)送且按發(fā)送順序接收。內設流量控制,避免數(shù)據(jù)流超限;數(shù)據(jù)被看作是字節(jié)流,無長度限制。流式套接字使用傳輸控制協(xié)議(TCP) 。它提供了一種可靠的,面向連接的 591 論文網(wǎng) 數(shù)據(jù)傳輸方式。通常基于連接的流式套接字是設計客戶機/服務器應用程序時的標準。流式套接字主要用于大批量數(shù)據(jù)或者讓數(shù)據(jù)按順序無重復的到達目的地而使用2)數(shù)據(jù)報式套接字(SOCKET_DGRAM)提供了無連接服務。數(shù)據(jù)包以獨立形式被發(fā)送,不提供無錯保證,數(shù)據(jù)可能丟失或者重復,并且接收順序無序。數(shù)據(jù)報套接字使用用戶數(shù)據(jù)報協(xié)議(UDP) 。實際使用中,同一個分組數(shù)據(jù)報可能不止一次的被發(fā)送,一般要等到接收方發(fā)回確認收到的消息才會停止發(fā)送。一般有兩種套接字規(guī)范:一種是針對 UNIX 系統(tǒng)的 Berkely Socket 規(guī)范;一種是占主流地位的 Windows sockets(簡稱 WinSock)規(guī)范,它是 Microsoft 以 Berkely Socket 規(guī)范為范例開發(fā)的 windows 下的網(wǎng)絡編程接口。Windows socket 規(guī)范定義并記錄了如何使用 API 與 Inter 協(xié)議相連接,且所有的 Windows socket 實現(xiàn)都支持流式套接字和數(shù)據(jù)報套接字。應用程序調用 Windows socket 的 API 實現(xiàn)相互之間的通信。 Windows socket 又利用下層的網(wǎng)絡通信協(xié)議功能和操作系統(tǒng)調用實現(xiàn)實際的通信工作。 Win Socket API本文在軟件實現(xiàn)上使用的 Socket 函數(shù)正是 Windows Socket API。下面介紹幾個重要的 API:一) WSAStartup 函數(shù) int WSAStartup( WORD wVersionRequested, LPWSADATA lpWSAData )。 使用 Socket 的程序在使用 Socket 之前必須調用 WSAStartup 函數(shù)。該函數(shù)的第一個參數(shù)指明程序請求使用的 Socket 版本,其中高位字節(jié)指明副版本、低位字節(jié)指明主版本;操作系統(tǒng)利用第二個參數(shù)返回請求的 Socket的版本信息。當一個應用程序調用 WSAStartup 函數(shù)時,操作系統(tǒng)根據(jù)請求的 Socket 版本來搜索相應的 Socket 庫,然后綁定找到的 Socket 庫到該應用程序中。以后應用程序就可以調用所請求的 Socket 庫中的其它 Socket 函數(shù)了。該函數(shù)執(zhí)行成功后返回 0。 例:假如一個程序要使用 版本的 Socket,那么程序代碼如下 wVersionRequested = MAKEWORD( 2, 1 )。 err = WSAStartup( wVersionRequested, amp。wsaData )。 591 論文網(wǎng) 二) WSACleanup 函數(shù) int WSACleanup (void)。 應用程序在完成對請求的 Socket 庫的使用后,要調用 WSACleanup 函數(shù)來解除與 Socket 庫的綁定并且釋放 Socket 庫所占用的系統(tǒng)資源。 三) socket 函數(shù) SOCKET socket( int af, int type, int protocol )。 應用程序調用 socket 函數(shù)來創(chuàng)建一個能夠進行網(wǎng)絡通信的套接字。第一個參數(shù)指定應用程序使用的通信協(xié)議的協(xié)議族,對于 TCP/IP 協(xié)議族,該參數(shù)置 PF_INET。第二個參數(shù)指定要創(chuàng)建的套接字類型,流套接字類型為SOCK_STREAM、數(shù)據(jù)報套接字類型為 SOCK_DGRAM;第三個參數(shù)指定應用程序所使用的通信協(xié)議。該函數(shù)如果調用成功就返回新創(chuàng)建的套接字的描述符,如果失敗就返回 INVALID_SOCKET。套接字描述符是一個整數(shù)類型的值。每個進程的進程空間里都有一個套接字描述符表,該表中存放著套接字描述符和套接字數(shù)據(jù)結構的對應關系。該表中有一個字段存放新創(chuàng)建的套接字的描述符,另一個字段存放套接字數(shù)據(jù)結構的地址,因此根據(jù)套接字描述符就可以找到其對應的套接字數(shù)據(jù)結構。每個進程在自己的進程空間里都有一個套接字描述符表但是套接字數(shù)據(jù)結構都是在操作系統(tǒng)的內核緩沖里。下面是一個創(chuàng)建流套接字的例子: struct protoent *ppe。 ppe=getprotobyname(tcp)。 SOCKET ListenSocket=socket(PF_INET,SOCK_STREAM,ppep_proto)。 四) closesocket 函數(shù) int closesocket( SOCKET s )。 closesocket 函數(shù)用來關閉一個描述符為 s 套接字。由于每個進程中都有一個套接字描述符表,表中的每個套接字描述符都對應了一個位于操作系統(tǒng)緩沖區(qū)中的套接字數(shù)據(jù)結構,因此有可能有幾個套接字描述符指向同一個套接字數(shù)據(jù)結構。套接字數(shù)據(jù)結構中專門有一個字段存放該結構的被引用次數(shù),即有多少個套接字描述符指向該結構。當調用 closesocket 函數(shù)時,操作系統(tǒng)先檢查套接字數(shù)據(jù)結構中的該字段的值,如果為 1,就表明只有一個套接字描述符指向它,因此操作系統(tǒng)就先把 s 在套接字描述符表中對應的那條表項清除,并且釋放 s 對應的套接字數(shù)據(jù)結構;如果該字段大于 1,那么操作系統(tǒng)僅僅清除 s 在套接字描述符表中的對應表項,并且把 s 對應的套接字數(shù)據(jù)結構的引用次數(shù)減 1。closesocket 函數(shù)如果執(zhí)行成功就返回 0,否則返回 SOCKET_ERROR。 591 論文網(wǎng) 五) send 函數(shù) int send( SOCKET s, const char FAR *buf, int len, int flags )。 不論是客戶還是服務器應用程序都用 send 函數(shù)來向 TCP 連接的另一端發(fā)送數(shù)據(jù)??蛻舫绦蛞话阌?send 函數(shù)向服務器發(fā)送請求,而服務器則通常用 send 函數(shù)來向客戶程序發(fā)送應答。該函數(shù)的第一個參數(shù)指定發(fā)送端套接字描述符;第二個參數(shù)指明一個存放應用程序要發(fā)送數(shù)據(jù)的緩沖區(qū);第三個參數(shù)指明實際要發(fā)送的數(shù)據(jù)的字節(jié)數(shù);第四個參數(shù)一般置 0。這里只描述同步 Socket 的 send 函數(shù)的執(zhí)行流程。當調用該函數(shù)時,send 先比較待發(fā)送數(shù)據(jù)的長度 len 和套接字 s 的發(fā)送緩沖區(qū)的長度,如果 len 大于 s 的發(fā)送緩沖區(qū)的長度,該函數(shù)返回 SOCKET_ERROR;如果 len 小于或者等于 s 的發(fā)送緩沖區(qū)的長度,那么 send 先檢查協(xié)議是否正在發(fā)送 s 的發(fā)送緩沖中的數(shù)據(jù),如果是就等待協(xié)議把數(shù)據(jù)發(fā)送完,如果協(xié)議還沒有開始發(fā)送 s 的發(fā)送緩沖中的數(shù)據(jù)或者 s 的發(fā)送緩沖中沒有數(shù)據(jù),那么 send 就比較 s 的發(fā)送緩沖區(qū)的剩余空間和 len,如果 len 大于剩余空間大小 send 就一直等待協(xié)議把 s 的發(fā)送緩沖中的數(shù)據(jù)發(fā)送完,如果 len 小于剩余空間大小 send 就僅僅把 buf中的數(shù)據(jù) copy 到剩余空間里(注意并不是 send 把 s 的發(fā)送緩沖中的數(shù)據(jù)傳到連接的另一端的,而是協(xié)議傳的,send 僅僅是把 buf 中的數(shù)據(jù) copy 到 s的發(fā)送緩沖區(qū)的剩余空間里) 。如果 send 函數(shù) copy 數(shù)據(jù)成功,就返回實際copy 的字節(jié)數(shù),如果 send 在 copy 數(shù)據(jù)時出現(xiàn)錯誤,那么 send 就返回SOCKET_ERROR;如果 send 在等待協(xié)議傳送數(shù)據(jù)時網(wǎng)絡斷開的話,那么 send函數(shù)也返回 SOCKET_ERROR。要注意 send 函數(shù)把 buf 中的數(shù)據(jù)成功 copy 到s 的發(fā)送緩沖的剩余空間里后它就返回了,但是此時這些數(shù)據(jù)并不一定馬上被傳到連接的另一端。如果協(xié)議在后續(xù)的傳送過程中出現(xiàn)網(wǎng)絡錯誤的話,那么下一個 Socket 函數(shù)就會返回 SOCKET_ERROR。 (每一個除 send 外的 Socket函數(shù)在執(zhí)行的最開始總要先等待套接字的發(fā)送緩沖中的數(shù)據(jù)被協(xié)議傳送完畢才能繼續(xù),如果在等待時出現(xiàn)網(wǎng)絡錯誤,那么該 Socket 函數(shù)就返回SOCKET_ERROR) 注意:在 Unix 系統(tǒng)下,如果 send 在等待協(xié)議傳送數(shù)據(jù)時網(wǎng)絡斷開的話,調用 send 的進程會接收到一個 SIGPIPE 信號,進程對該信號的默認處理是進程終止。 六) recv 函數(shù) int recv( SOCKET s, char FAR *buf, int len, int flags )。 不論是客戶還是服務器應用程序都用 recv 函數(shù)從 TCP 連接的另一端接收數(shù)據(jù)。該函數(shù)的第一個參數(shù)指定接收端
點擊復制文檔內容
公司管理相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1