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

正文內(nèi)容

通信協(xié)議與網(wǎng)絡(luò)程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)書-在線瀏覽

2025-07-19 00:32本頁面
  

【正文】 數(shù)的句柄,第二個(gè)參數(shù)設(shè)置為INFINITE,等待線程一直執(zhí)行完。在線程函數(shù)里面我們可以簡(jiǎn)單地做一些工作,比如設(shè)置一個(gè)循環(huán),讓它輸出一定的信息等。int i。for(i=0。i++)return 0。HANDLE Thread。DWORD dwThreadId。Thread=::CreateThread(NULL,0,ThreadFunc,NULL,0,amp。}五、 實(shí)驗(yàn)報(bào)告要求(必要時(shí)應(yīng)準(zhǔn)備多組數(shù)據(jù))(應(yīng)加適當(dāng)?shù)淖⑨?,可讀性好)(出錯(cuò)及解決方法,上機(jī)調(diào)試的結(jié)果和體會(huì))實(shí)驗(yàn)二 套接字編程練習(xí)一、 實(shí)驗(yàn)?zāi)康耐ㄟ^在SDK模式下完成數(shù)據(jù)通信的過程,掌握Windows Socket的常用函數(shù)的形式和使用方法,理解數(shù)據(jù)通信的過程。三、 實(shí)驗(yàn)環(huán)境Windows操作系統(tǒng)、VC++四、 實(shí)驗(yàn)指導(dǎo)在WINDOWS95/98,WINDOWSNT進(jìn)行WINSOCK開發(fā)使用的編程語言有很多, VC++,JAVA,DELPHI,VB等。并且VC++對(duì)原來的WindowsSockets庫(kù)函數(shù)進(jìn)行了一系列封裝,繼而產(chǎn)生了CAsynSocket、CSocket、CSocketFile等類,它們封裝著有關(guān)Socket的各種功能,是編程變得更加簡(jiǎn)單。在VC中進(jìn)行WINSOCK的API編程開發(fā),需要使用到下面三個(gè)文件:: 這是WINSOCK API的頭文件。在使用中,一點(diǎn)要把它作為項(xiàng)目的非缺省的連接庫(kù)包含到項(xiàng)目文件中去。在一開始WINSOCK的應(yīng)有開發(fā)時(shí),你不必對(duì)TCP/IP協(xié)議有很深刻的了解??偟膩碚f,使用SOCKET接口(面向連接或無連接)進(jìn)行網(wǎng)絡(luò)通信時(shí),必須按下面簡(jiǎn)單的四步進(jìn)行處理: SOCKET。也就是說,程序要么將此SOCKET連接到遠(yuǎn)方的主機(jī)上,要么給此SOCKET指定一個(gè)本地協(xié)議端口。該模式的建立基于以下兩點(diǎn):(1)非對(duì)等作用;(2)通信完全是異步的?!。?)等待客戶請(qǐng)求到達(dá)該端口?!。?)返回第二步,等待另一客戶請(qǐng)求?。?)關(guān)閉服務(wù)器?!。?)向服務(wù)器發(fā)送服務(wù)請(qǐng)求報(bào)文,等待并接收應(yīng)答;繼續(xù)提出請(qǐng)求……?。?)請(qǐng)求結(jié)束后關(guān)閉通信通道并終止。 SOCKET socket(int af, int type, int protocol)。參數(shù)af指定通信發(fā)生的區(qū)域,UNIX系統(tǒng)支持的地址族有:AF_UNIX、AF_INET、AF_NS等,而DOS、WINDOWS中僅支持AF_INET,它是網(wǎng)際網(wǎng)區(qū)域。參數(shù)type描述要建立的套接字的類型。根據(jù)這三個(gè)參數(shù)建立一個(gè)套接字,并將相應(yīng)的資源分配給它, 同時(shí)返回一個(gè)整型套接字號(hào)。指定本地地址──bind()當(dāng)一個(gè)套接字用socket()創(chuàng)建后,存在一個(gè)名字空間(地址族),但它沒有被命名。其調(diào)用格式如下:int bind(SOCKET s, const struct sockaddr FAR * name, int namelen)。參數(shù)name是賦給套接字s的本地地址(名字),其長(zhǎng)度可變,結(jié)構(gòu)隨通信域的不同而不同。如果沒有錯(cuò)誤發(fā)生,bind()返回0。地址在建立套接字通信過程中起著重要作用,作為一個(gè)網(wǎng)絡(luò)應(yīng)用程序設(shè)計(jì)者對(duì)套接字地址結(jié)構(gòu)必須有明確認(rèn)識(shí)。無連接的套接字進(jìn)程也可以調(diào)用connect(),但這時(shí)在進(jìn)程之間沒有實(shí)際的報(bào)文交換,調(diào)用將從本地操作系統(tǒng)直接返回。而accept()用于使服務(wù)器等待來自某客戶進(jìn)程的實(shí)際連接。參數(shù)s是欲建立連接的本地套接字描述符。對(duì)方套接字地址長(zhǎng)度由namelen說明。否則返回值SOCKET_ERROR。由于地址族總被包含在套接字地址結(jié)構(gòu)的前兩個(gè)字節(jié)中,并通過socket()調(diào)用與某個(gè)協(xié)議族相關(guān)。 accept()的調(diào)用格式如下: SOCKET accept(SOCKET s,struct sockaddr FAR* addr,int FAR* addrlen)。addr 指向客戶方套接字地址結(jié)構(gòu)的指針, 用來接收連接實(shí)體的地址。addrlen 為客戶方套接字地址的長(zhǎng)度(字節(jié)數(shù))。否則返回值INVALID_SOCKET。參數(shù)addr和addrlen 存放客戶方的地址信息。當(dāng)有連接請(qǐng)求到達(dá)時(shí), accept()調(diào)用將請(qǐng)求連接隊(duì)列上的第一個(gè)客戶方套接字地址及長(zhǎng)度放入addr和addrlen,并創(chuàng)建一個(gè)與s有相同特性的新套接字號(hào)。 四個(gè)套接字系統(tǒng)調(diào)用,socket()、bind()、connect()、accept(),可以完成一個(gè)完全五元相關(guān)的建立。bind()指定五元組中的本地二元,即本地主機(jī)地址和端口號(hào),其用法與是否面向連接有關(guān):在服務(wù)器方,無論是否面向連接,均要調(diào)用 bind() ;在客戶方,若采用面向連接,則可以不調(diào)用bind(),而通過connect()自動(dòng)完成。 以上討論僅對(duì)客戶/服務(wù)器模式而言,實(shí)際上套接字的使用是非常靈活的,唯一需遵循的原則是進(jìn)程通信之前,必須建立完整的相關(guān)。listen()需在accept ()之前調(diào)用,其調(diào)用格式如下: int listen(SOCKET s, int backlog)。 backlog 表示請(qǐng)求連接隊(duì)列的最大長(zhǎng)度, 用于限制排隊(duì)請(qǐng)求的個(gè)數(shù),目前允許的最大值為5。否則它返回SOCKET_ERROR。調(diào)用listen()是服務(wù)器接收一個(gè)連接請(qǐng)求的四個(gè)步驟中的第三步。 數(shù)據(jù)傳輸──send()與recv()當(dāng)一個(gè)連接建立以后,就可以傳輸數(shù)據(jù)了。 send() 調(diào)用用于在參數(shù)s指定的已連接的數(shù)據(jù)報(bào)或流套接字上發(fā)送輸出數(shù)據(jù),格式如下: int send(SOCKET s, const char FAR *buf, int len, int flags)。buf 指向存有發(fā)送數(shù)據(jù)的緩沖區(qū)的指針,其長(zhǎng)度由 len 指定。如果沒有錯(cuò)誤發(fā)生,send()返回總共發(fā)送的字節(jié)數(shù)。 recv()調(diào)用用于在參數(shù)s指定的已連接的數(shù)據(jù)報(bào)或流套接字上接收輸入數(shù)據(jù),格式如下: int recv(SOCKET s, char FAR *buf, int len, int flags)。buf指向接收輸入數(shù)據(jù)緩沖區(qū)的指針,其長(zhǎng)度由len 指定。如果沒有錯(cuò)誤發(fā)生,recv()返回總共接收的字節(jié)數(shù)。否則它返回SOCKET_ERROR。對(duì)每一個(gè)套接字來說,這個(gè)調(diào)用可以請(qǐng)求讀、寫或錯(cuò)誤狀態(tài)方面的信息。在返回時(shí),此結(jié)構(gòu)被更新,以反映那些滿足特定條件的套接字的子集,同時(shí), select()調(diào)用返回滿足條件的套接字的數(shù)目,其調(diào)用格式如下: int select(int nfds, fd_set FAR * readfds, fd_set FAR * writefds, fd_set FAR * exceptfds, const struct timeval FAR * timeout)。參數(shù)readfds指向要做讀檢測(cè)的套接字描述符集合的指針,調(diào)用者希望從中讀取數(shù)據(jù)。exceptfds指向要檢測(cè)是否出錯(cuò)的套接字描述符集合的指針。select()返回包含在fd_set結(jié)構(gòu)中已準(zhǔn)備好的套接字描述符的總數(shù)目,或者是發(fā)生錯(cuò)誤則返回SOCKET_ERROR。closesocket()的調(diào)用格式如下: BOOL closesocket(SOCKET s)。如果沒有錯(cuò)誤發(fā)生,closesocket()返回0。(7)多路復(fù)用——select()  功能:用來檢測(cè)一個(gè)或多個(gè)套接字狀態(tài)?! ?shù):readfds:指向要做讀檢測(cè)的指針     writefds:指向要做寫檢測(cè)的指針     exceptfds:指向要檢測(cè)是否出錯(cuò)的指針     timeout:最大等待時(shí)間面向連接的套接字的系統(tǒng)調(diào)用時(shí)序圖無連接協(xié)議的套接字調(diào)用時(shí)序圖面向連接的應(yīng)用程序流程圖這些擴(kuò)充主要是提供了一些異步函數(shù),并增加了符合WINDOWS消息驅(qū)動(dòng)特性的網(wǎng)絡(luò)事件異步選擇機(jī)制。開發(fā)組件:Windows Sockets 實(shí)現(xiàn)文檔、應(yīng)用程序接口(API)引入庫(kù)和一些頭文件。   Windows Sockets 提供了一個(gè)異步選擇函數(shù) WSAAsyncSelect(),用它來注冊(cè)應(yīng)用程序感興趣的網(wǎng)絡(luò)事件,當(dāng)這些事件發(fā)生時(shí),應(yīng)用程序相應(yīng)的窗口函數(shù)將收到一個(gè)消息。   參數(shù)說明:  hWnd:窗口句柄  wMsg:需要發(fā)送的消息lEvent:事件(以下為事件的內(nèi)容)值:含義:FD_READ期望在套接字上收到數(shù)據(jù)(即讀準(zhǔn)備好)時(shí)接到通知FD_WRITE期望在套接字上可發(fā)送數(shù)據(jù)(即寫準(zhǔn)備好)時(shí)接到通知FD_OOB期望在套接字上有帶外數(shù)據(jù)到達(dá)時(shí)接到通知FD_ACCEPT期望在套接字上有外來連接時(shí)接到通知FD_CONNECT期望在套接字連接建立完成時(shí)接到通知FD_CLOSE期望在套接字關(guān)閉時(shí)接到通知例如:我們要在套接字讀準(zhǔn)備好或?qū)憸?zhǔn)備好時(shí)接到通知,語句如下: rc=WSAAsyncSelect(s,hWnd,wMsg,FD_READ|FD_WRITE)。)。WINDOWS 是非搶先的多任務(wù)環(huán)境,即若一個(gè)程序不主動(dòng)放棄其控制權(quán),別的程序就不能執(zhí)行。但由于 SUN 公司下的 Berkeley Sockets 的套接字默認(rèn)操作是阻塞的,WINDOWS 作為移植的 SOCKETS 也不可避免對(duì)這個(gè)操作支持。在循環(huán)中,它發(fā)送任何 WINDOWS 消息,并檢查這個(gè) Windows Sockets 調(diào)用是否完成,在必要時(shí),它可以放棄CPU讓其它應(yīng)用程序執(zhí)行。在 Windows Sockets 中,有一個(gè)默認(rèn)的阻塞處理例程 BlockingHook() 簡(jiǎn)單地獲取并發(fā)送 WINDOWS 消息。請(qǐng)注意,設(shè)計(jì)自己的阻塞處理例程時(shí),除了函數(shù) WSACancelBlockingHook() 之外,它不能使用其它的 Windows Sockets API 函數(shù)。(4)出錯(cuò)處理Windows Sockets 為了和以后多線程環(huán)境(WINDOWS/UNIX)兼容,它提供了兩個(gè)出錯(cuò)處理函數(shù)來獲取和設(shè)置當(dāng)前線程的最近錯(cuò)誤號(hào)。不過我們還是先看一看每個(gè) Windows Sockets 網(wǎng)絡(luò)程序都要涉及的內(nèi)容。(1)啟動(dòng)與終止在所有Windows Sockets函數(shù)中,只有啟動(dòng)函數(shù)WSAStartup()和終止函數(shù)WSACleanup()是必須使用的。本結(jié)構(gòu)如下:int PASCAL FAR WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData)。我們看一下下面這段代碼,看一下如何進(jìn)行 WSAStartup() 的調(diào)用WORD wVersionRequested。 //定義數(shù)據(jù)信息變量int err。//給版本信息賦值err = WSAStartup(wVersionRequested, amp。//給錯(cuò)誤信息賦值if(err!=0){  return。//告訴用戶找不到合適的版本  return。程序運(yùn)行時(shí)可能會(huì)多次調(diào)用 WSAStartuo() 函數(shù),但必須保證每次調(diào)用時(shí)的 wVersionRequested 的值是相同的。該函數(shù)是阻塞請(qǐng)求函數(shù)的異步版本。當(dāng)結(jié)果存儲(chǔ)在調(diào)用者提供的緩沖區(qū),并且發(fā)送一個(gè)消息到應(yīng)用程序相應(yīng)窗口。char hostname=rs6000。 需要注意的是,由于 Windows 的內(nèi)存對(duì)像可以設(shè)置為可移動(dòng)和可丟棄,因此在操作內(nèi)存對(duì)象是,必須保證 WIindows Sockets DLL 對(duì)象是可用的。Windows Sockets 不鼓勵(lì)用戶使用阻塞方式傳輸數(shù)據(jù),因?yàn)槟菢涌赡軙?huì)阻塞整個(gè) Windows 環(huán)境?!   reak?! break。if((len==SOCKET_ERROR)amp。(WSAGetLastError()==WSAWOULDBLOCK)){...}(二)關(guān)于使用套接字編程的一些基本概念半相關(guān)與全相關(guān)半相關(guān)在網(wǎng)絡(luò)中用一個(gè)三元組可以在全局唯一標(biāo)志一個(gè)進(jìn)程: (協(xié)議,本地地址,本地端口號(hào))這樣一個(gè)三元組,叫做一個(gè)半相關(guān)(halfassociation),它指定連接的每半部分。也就是說,不可能通信的一端用TCP協(xié)議,而另一端用UDP協(xié)議。TCP/IP協(xié)議的地址結(jié)構(gòu)為: struct sockaddr_in{ short sin_family。 /*AF_INET*/ u_short sin_port。 /*16位端口號(hào),網(wǎng)絡(luò)字節(jié)順序*/ struct in_addr sin_addr。 流式套接字(SOCK_STREAM)提供了一個(gè)面向連接、可靠的數(shù)據(jù)傳輸服務(wù),數(shù)據(jù)無差錯(cuò)、無重復(fù)地發(fā)送,且發(fā)送順序接收。文件傳送協(xié)議(FTP)即使用流式套接字。提供了一個(gè)無連接服務(wù)。網(wǎng)絡(luò)文件系統(tǒng)(NFS)使用數(shù)據(jù)報(bào)式套接字。常用于檢驗(yàn)新的協(xié)議實(shí)現(xiàn)或訪問現(xiàn)有服務(wù)中配置的新設(shè)備。二、 實(shí)驗(yàn)內(nèi)容:回程時(shí)延。,然后立即接受從服務(wù)器端原樣返回的數(shù)據(jù)。 阻塞套接字是指執(zhí)行此套接字的網(wǎng)絡(luò)調(diào)用時(shí),直到成功才返回,否則一直阻塞在
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1