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

正文內(nèi)容

五子棋游戲的設(shè)計(jì)與開發(fā)—免費(fèi)計(jì)算機(jī)-文庫(kù)吧

2024-11-17 10:07 本頁面


【正文】 要的應(yīng)用開發(fā)系統(tǒng)之一。 Visual C++不僅是 C++語言的集成開發(fā)環(huán)境,而且與 Win32 緊密相連,所以,利用 Visual C++可以完成各種各樣的應(yīng)用程序的開發(fā),從底層軟件直到上層直接面向用戶的軟件。而且, Visual C++強(qiáng)大的調(diào)試功能的為大型復(fù)雜軟件的開發(fā)提供了有效的排錯(cuò)手段。 進(jìn)入 90 年代以來,隨著多媒體技術(shù)和圖形圖像技術(shù)的不斷發(fā)展,可視化( Visual)技術(shù)得到廣泛的重視,越來越多計(jì)算機(jī)專業(yè)人員和非專業(yè)人員都開始研究并 應(yīng)用可視化技術(shù)。所謂可視化技術(shù),一般是指軟件開發(fā)階段的可視化和計(jì)算機(jī)圖形技術(shù)和方法的應(yīng)用。可視化編程就是軟件開發(fā)階段的可視化。 Visual C++ 是一個(gè)很好的可視化編程工具,使用 Visual C++ 環(huán)境來開發(fā) Windows應(yīng)用程序大大縮短了開發(fā)時(shí)間,而且它的界面更友好,便于程序員操作。 開發(fā)環(huán)境是程序員同 Visual C++的交互界面,通過它程序員可以訪問 C++源代碼編輯器、資源編輯器,使用內(nèi)部調(diào)試器,并且可以創(chuàng)建工程文件。 OSI模型介紹 OSI 是 Open System Interconnect 的縮寫,意為開放式系統(tǒng)互聯(lián)。國(guó)際標(biāo)準(zhǔn)組織(國(guó)際標(biāo)準(zhǔn)化組織)制定了 OSI 模型。這個(gè)模型把網(wǎng)絡(luò)通信的工作分為 7層,分別是物理層,數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層,傳輸層,會(huì)話層,表示層和應(yīng)用層。1至 4層被認(rèn)為是低層,這些層與數(shù)據(jù)移動(dòng)密切相關(guān)。 5 至 7層是高層,包含應(yīng)用程序級(jí)的數(shù)據(jù)。每一層負(fù)責(zé)一項(xiàng)具體的工作,然后把數(shù)據(jù)傳送到下一層。 如圖 11: 圖 11 OSI模型圖 TCP/IP模型介紹 TCP/IP 是 Transmission Control Protocol/Inter Protocol(傳輸控制協(xié)議/互聯(lián)網(wǎng) 協(xié)議)的縮寫。 TCP/IP 協(xié)議使用范圍極廣,許多廠商的計(jì)算機(jī)操作系統(tǒng)和網(wǎng)絡(luò)操作系統(tǒng)產(chǎn)品都采用或含有 TCP/IP 協(xié)議。 TCP/IP 協(xié)議已成為目前事實(shí)上的國(guó)際標(biāo)準(zhǔn)和工業(yè)標(biāo)準(zhǔn)。 TCP/IP 也是一個(gè)分層的網(wǎng)絡(luò)協(xié)議,不過它與 OSI 模型所分的層次有所不同。TCP/IP 從底至頂分為鏈路層、網(wǎng)絡(luò)層、傳輸層、應(yīng)用層等 4 個(gè)層次。 TCP/IP 的分層情況如圖 12 所示。 圖 12 TCP/IP模型圖 Winsock技術(shù) Winsock 編程流程簡(jiǎn)介 下面介紹一下 Win32 平臺(tái)的 Winsock 編程方法。通訊則必須有服務(wù)器端 和客戶端。簡(jiǎn)單介紹 tcp 服務(wù)器端的大體流程。 int WSAStarup( WORD wVersionRequested , LPWSADATA lpWsAData ) SOCKET socket( int af , int type , int protocol ); 當(dāng)調(diào)用了 socket()接口函數(shù)創(chuàng)建了一個(gè)套接字后,必須把套接字與需要進(jìn)行通訊的地址建立聯(lián)系。 int bind(SOCKET s , const struct sockaddr FAR* name , int namelen ) 。 struct sockaddr_in { short sin_family 。 u_short sin_prot 。 struct in_addr sin_addr 。 char sin_sero[8] 。 } 就包含了需要建立連接的本地的地址,包括地址族, ip和端口信息; Winsock API 提供了幾個(gè)函數(shù),把主機(jī)字節(jié)轉(zhuǎn)化成網(wǎng)絡(luò)字節(jié)的函數(shù); u_long htonl( u_long hostlong )。 u_short htons( u_short hostshort )。 把網(wǎng)絡(luò)字節(jié)轉(zhuǎn)化成主機(jī)字節(jié)的函數(shù); u_long ntohl( u_long long ) 。 u_short ntohs( u_short short ) 。 當(dāng)綁定完成之后,服務(wù)器端必須建立一個(gè)監(jiān)聽的隊(duì)列來接收客戶端的連接請(qǐng)求。 int listen( SOCKET s ,int backlog )。 如果客戶端有了連接請(qǐng)求,還必須使用 int accept( SOCKET s , struct sockaddr FAR* addr , int FAR* addrlen )來接受客戶端的請(qǐng)求。 現(xiàn)在基本上已經(jīng)完成了一個(gè)服務(wù)器的建立,而客戶端的建立的流程則是初始化 WinSock ,然后創(chuàng)建 socket 套接字,再使用 int connect( SOCKET s , const struct sockaddr FAR* name , int namelen ) 來連接服務(wù)端。 當(dāng)服務(wù)器端和客戶端建立連接以后,無論是客戶端 ,還是服務(wù)器端都可以使用: int send( SOCKET s , const char FAR* buf , int len , int flags )。 int recv( SOCKET s , char FAR* buf , int len , int flags )。 函數(shù)來接收和發(fā)送數(shù)據(jù),因?yàn)?,TCP 連接是雙向的。 當(dāng)要關(guān)閉通訊連結(jié)的時(shí)候,任何一方都可以調(diào)用 int shutdown( SOCKET s , int how ) 來關(guān)閉套接字的指定功能。再調(diào)用 int closesocket( SOCKET s) 來關(guān)閉套接字句柄。這樣一個(gè)通訊過程就算完成了。 CAsyncSocket 類介紹 微軟的 MFC 把復(fù)雜的 WinSock API 函數(shù)封裝到類里,這使得編寫 網(wǎng)絡(luò)應(yīng)用程序更容易。 CAsyncSocket 類逐個(gè)封裝了 WinSock API,為高級(jí)網(wǎng)絡(luò)程序員提供了更加有力而靈活的方法。這個(gè)類基于程序員了解網(wǎng)絡(luò)通訊的假設(shè),目的是為了在MFC中使用 WinSock,程序員有責(zé)任處理諸如阻塞、字節(jié)順序和在 Unicode 與 MBCS 間轉(zhuǎn)換字符的任務(wù)。 CAsyncSocket 類編程模型 在一個(gè) MFC 應(yīng)用程序中,要想輕松處理多個(gè)網(wǎng)絡(luò)協(xié)議,而又不犧牲靈活性時(shí),可以考慮使用 CAsyncSocket 類,它的效率比 CSocket 類要高。 CAsyncSocket類針對(duì)字節(jié)流型套接字的編 程模型簡(jiǎn)述如下: 構(gòu)造一個(gè) CAsyncSocket 對(duì)象,并用這個(gè)對(duì)象的 Create 成員函數(shù)產(chǎn)生一個(gè) Socket 句柄??梢园慈缦聝煞N方法構(gòu)造: CAsyncSocket sock。 //使用默認(rèn)參數(shù)產(chǎn)生一個(gè)字節(jié)流套接字 ()。 或在指定端口號(hào)產(chǎn)生一個(gè)數(shù)據(jù)報(bào)套接字 CAsyncSocket*pSocket=newCAsyncSocket。 int nPort=27。 pSocketCreate(nPort,SOCKDGRAM)。 第一種方法在棧上產(chǎn)生一個(gè) CAsyncSocket 對(duì)象,而第二種方法在堆上產(chǎn)生CAsyncSocket 對(duì)象;第一種方法中 Create()成員函數(shù)用缺省參數(shù)產(chǎn)生一個(gè)字節(jié)流套接字,第二種方法中用 Create()成員函數(shù)在指定的端口產(chǎn)生一個(gè)數(shù)字報(bào)套接字。 Create()函數(shù)的原型為: BOOL Create( UINT nSocketPort = 0, int nSocketType = SOCK_STREAM, LPCTSTR lpszSocketAddress = NULL )。 該函數(shù)的參數(shù)有: 1)端口, UINT 類型。注意:如果是服務(wù)方,則使用一個(gè)眾所 周知的端口供服務(wù)方連接;如果是客戶方,典型做法是接受默認(rèn)參數(shù),使套接字可以自主選擇一個(gè)可用端口。 2) socket 類型,可以是 SOCKSTREAM(默認(rèn)值,字節(jié)流)或 SOCKDGRAM(數(shù)據(jù)報(bào))。 3) socket 的地址,例如 或 。 如是客戶方程序,用 CAsyncSocket∷ Connect()成員函數(shù)連接到服務(wù)方;如是服務(wù)方程序,用 CAsyncSocket∷ Listen()成員函數(shù)開始監(jiān)聽,一旦收到連接請(qǐng)求,則調(diào)用 CAsyncSocket∷ Accept()成員函數(shù)開始接收。注意:CAsyncSocket ∷ Accept()成員函數(shù)要用一個(gè)新的并且是空的 CAsyncSocket對(duì)象作為它的參數(shù),這里所說的 空的 指的是這個(gè)新對(duì)象還沒有調(diào)用 Create()成員函數(shù)。 調(diào)用其他的 CAsyncSocket 類的 Receive()、 ReceiveFrom()、 Send()和 SendTo()等成員函數(shù)進(jìn)行數(shù)據(jù)通信。 通訊結(jié)束后,銷毀 CAsyncSocket對(duì)象。如果是在棧上產(chǎn)生的 CAsyncSocket對(duì)象,則對(duì)象超出定義的范圍時(shí)自 動(dòng)被析構(gòu);如果是在堆上產(chǎn)生,也就是用了new 這個(gè)操作符,則必須使用 delete 操作符銷毀 CAsyncSocket 對(duì)象。 CSocket 類介紹 為了給程序員提供更方便的接口以自動(dòng)處理這些任務(wù), MFC 給出了 CSocket類,這個(gè)類是由 CAsyncSocket 類繼承下來的,它提供了比 CAsyncSocket 更高層的 WinSock API 接口。 Csocket 類和 CsocketFile 類可以與 Carchive 類一起合作來管理發(fā)送和接收的數(shù)據(jù),這使管理數(shù)據(jù)收發(fā)更加便利。 CSocket 對(duì)象提供阻塞模式,這對(duì)于 Carchive的同步操作是至關(guān)重要的。阻塞函數(shù)(如 Receive()、Send()、 ReceiveFrom()、 SendTo() 和 Accept())直到操作完成后才返回控制權(quán),因此如果需要低層控制和高效率,就使用 CasyncSock 類;如果需要方便,則可使用 Csocket 類。 一個(gè) CSocket 對(duì)象代表了一個(gè)比 CAsyncSocket 對(duì)象更高層次的 Windows Socket 的抽象, CSocket 類與 CSocketFile 類和 CArchive 類一起工作來發(fā)送和接收數(shù)據(jù),因此使用它更加容易使用。 CSocket 對(duì)象提 供阻塞模式,因?yàn)樽枞δ軐?duì)于 CArchive 的同步操作是至關(guān)重要的。在這里有必要對(duì)阻塞的概念作一解釋:一個(gè) socket 可以處于“阻塞模式”或“非阻塞模式”,當(dāng)一個(gè)套接字處于阻塞模式(即同步操作)時(shí),它的阻塞函數(shù)直到操作完成才會(huì)返回控制權(quán),之所以稱為阻塞是因?yàn)榇颂捉幼值淖枞瘮?shù)在完成操作返回之前什么也不能做。如果一個(gè) socket 處于非阻塞模式(即異步操作),則會(huì)被調(diào)用函數(shù)立即返回。在CAsyncSocket 類中可以用 GetLastError 成員函數(shù)查詢最后的錯(cuò)誤,如果錯(cuò)誤是WSAEWOULDBLOCK 則說明 有阻塞,而 CSocket 絕不會(huì)返回 WSAEWOULDBLOCK,因?yàn)樗约汗芾碜枞?。但?CSocket 類中,為了利用 CArchive 處理通訊中的許多問題和簡(jiǎn)化編程,它的一些成員函數(shù)總是具有阻塞性質(zhì)的,這是因?yàn)?CArchive 類需要同步的操作。 CSocket 類編程模型 使用 CSocket 對(duì)象涉及 CArchive 和 CSocketFile 類對(duì)象。以下介紹的針對(duì)字節(jié)流型套接字的操作步驟中,只有第 3 步對(duì)于客戶方和服務(wù)方操作是不同的,其他步驟都相同。 構(gòu)造一個(gè) CSocket 對(duì)象。 使用這個(gè)對(duì)象的 Create()成員函數(shù)產(chǎn)生一個(gè) socket 對(duì)象。在客戶方程序中,除非需要數(shù)據(jù)報(bào)套接字, Create()函數(shù)一般情況下應(yīng)該使用默認(rèn)參數(shù)。而對(duì)于服務(wù)方程序,必須在調(diào)用 Create 時(shí)指定一個(gè)端口。需要注意的是,Carchive 類對(duì)象不能與數(shù)據(jù)報(bào)( UDP)套接字一起工作,因此對(duì)于數(shù)據(jù)報(bào)套接字,CAsyncSocket 和 CSocket 的使用方法是一樣的。 如果是客戶方套接字,則調(diào)用 CAsyncSocket ∷ Connect()函數(shù)與服務(wù)方套接字連接;如果是服務(wù)方套接字,則調(diào)用 CAsyncSocket∷ Listen()開始監(jiān)聽來自客戶方的連接請(qǐng)求,收到連接請(qǐng)求后,調(diào)用 CAsyncSocket∷ Accept()函數(shù)接受請(qǐng)求,建立連接。請(qǐng)注意 Accept()成員函數(shù)需要一個(gè)新的并且為空的 CSocket 對(duì)象作為它的參數(shù),解釋同上。 產(chǎn)生一個(gè) CSocketFile 對(duì)象,并把它與 CSocket 對(duì)象關(guān)聯(lián)起來。 為接收和發(fā)送數(shù)據(jù)各產(chǎn)生一個(gè) CArchive 對(duì)象,把它們與 CSocketFile對(duì)象關(guān)聯(lián)起來。切記 CArchive 是不能和數(shù)據(jù)報(bào)套接字一起工作的。 使用 CArchive 對(duì)象的 Read()、 Write()等函 數(shù)在客戶與服務(wù)方傳送數(shù)據(jù)。 通訊完畢后,銷毀 CArchive、 CSocketFile 和 CSocket 對(duì)象 多媒體 MCI 接口介紹 多媒體控制接口 MCI 是 MicroSoft Windows 定義的多媒體接口標(biāo)準(zhǔn)。 MCI向Windows 提供高層次的,獨(dú)立于設(shè)備的,控制各種多媒體設(shè)備的命令。 MCI 可以在 C 語言中直接調(diào)用函數(shù)庫(kù)。 對(duì) MCI 的訪問可以通過兩種方式:一種是使用消息命令接口函數(shù);另一種是使用字符串接口函數(shù)。它們的不同之處在于有著不用的命令結(jié)構(gòu)和發(fā)送消息到多媒體設(shè)備的不同原理。但是任何一種方式都可以達(dá)到同樣 的效果。 基于字符串多媒體控制接口的編程方式,通過向設(shè)備發(fā)送字符串實(shí)現(xiàn)對(duì)多媒體設(shè)備的控制。這種方式主要有兩個(gè)函數(shù) MciSendString和 MciGetError
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1