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

正文內(nèi)容

某學(xué)校機(jī)房管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)(編輯修改稿)

2025-05-15 06:50 本頁(yè)面
 

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