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

正文內(nèi)容

基于java實時監(jiān)控遠程控制系統(tǒng)設計和實現(xiàn)畢業(yè)論文(編輯修改稿)

2025-07-15 15:45 本頁面
 

【文章內(nèi)容簡介】 使用數(shù)據(jù)報套接字在使用數(shù)據(jù)報套接字時,首先,要調(diào)用bind()函數(shù),聲明如下: int PASCAL FAR bind (SOCKET s,const struct sockaddr FAR *addr,int namelen);其中s指要綁定的套接字句柄,addr時一個地址結(jié)果sockaddr_in,用來指定一個IP地址,結(jié)構(gòu)如下:Struct sockaddr_in{ Short sin_family;(AF_INET)U_short sin_port;(端口) Struct in_addr sin_addr,;(地址) Char sin_aero[8];(填充數(shù))}namelen 是指參數(shù)addr的長度。一旦在服務器端創(chuàng)建了一個套接字,并且賦給了特定的地址和端口,就可以隨時接收來自客戶端賭數(shù)據(jù),我用了recvfrom()函數(shù)來實現(xiàn)的。 int recvfrom(SOCKET s,char FAR *buf, int len,int flags,struct sockaddr FAR *from,int FAR *fromlen );參數(shù)flags可以指定為MSG_PEEK,可以取出數(shù)據(jù)填入緩沖去,但仍會吧數(shù)據(jù)報留在輸入隊列。后面的兩個參數(shù)用來返回發(fā)送數(shù)據(jù)報的套接字地址,然后就可以使用這個地址向發(fā)送者發(fā)回一個答復。如果數(shù)據(jù)報讀入成功,則返回接收的字節(jié)數(shù),否則返回SOCKET_REEOR。發(fā)送數(shù)據(jù)可以用sendto()函數(shù)實現(xiàn),原型為: int sendto(SOCKET s,const char FAR *buf ,int len,int flags,const struct sockaddr FAR *to ,int to len)。參數(shù)意義與recvfrom()類似。 使用流式套接字由于流式套接字使用的是基于連接的協(xié)議,所以,它要先建立連接,然后才能讀數(shù)據(jù), 和數(shù)據(jù)報套接字一樣,流式套接字也由socket()函數(shù)來創(chuàng)建,而且,用時必須用bind()函數(shù)為他分配一個地址,在創(chuàng)建一個套接字時,使用流式套接字與數(shù)據(jù)報套接字唯一不同的是,socket()調(diào)用傳遞的是SOCK_STREAM,而不是SOCK_DGRAM。 當已經(jīng)建立了套接字,并賦給它一個地址后,需要移植方法建立和客戶端的連接,為了做到這一點,要使用監(jiān)聽連接。我使用了listen()函數(shù),聲明如下: int listen(SOCKET s,int backlog)參數(shù)Backlog告訴WinSock應用程序能接收多少個請求。 一旦套接字設置成監(jiān)聽,實際的連接要accept()函數(shù)來完成。函數(shù)accept()聲明如下: SOCKET accept(SOCKET s,struct sockaddr FAR *addr,int FAR *addrlen); 與bind()和recvfrom()函數(shù)一樣使用了sock_addr結(jié)構(gòu)。如果連接成功的接受,accept()函數(shù)返回一個新的套接字句柄。如果出現(xiàn)錯誤,則返回INVALID_SOCKET,這時,可以調(diào)用WSAGetLastError()來得到更高關(guān)于錯誤的細節(jié)。原來的套系在將繼續(xù)監(jiān)聽新的連接請求,新的請求可能會通過accept()函數(shù)的再一次調(diào)用而獲得。 為了讓服務器接受請求,必須先發(fā)送請求,客戶端程序通過connect()函數(shù)來做這一點的,原型聲明如下: int connect(SOCKET s,const struct sockaddr FAR *name,int namelen);參數(shù)sockaddr和namelen用來指定要連接的套系在的地址和端口。傳給connect()函數(shù)的sockaddr結(jié)構(gòu)和給服務器bind()函數(shù)的sockaddr結(jié)構(gòu)是一樣的。一旦客戶端和服務器端建立了連接,就可以通過send()函數(shù)調(diào)用來發(fā)送數(shù)據(jù)了int send(SOCKET s,const char FAR *buf,int len,int flags);參數(shù)buf和len分別指向?qū)⒂邪l(fā)送的數(shù)據(jù)的指針和長度。參數(shù)flags參數(shù)可以指定為MSG_DONTROUTE,告訴WinSock在發(fā)送數(shù)據(jù)時,不要使用循環(huán)消息。為了從流式套接字接收數(shù)據(jù),可以使用recv()函數(shù):int recv (SOCKET s,char FAR *buf,int leg,int falgs);參數(shù)flags可設置成MSOOB,用來接收帶外數(shù)據(jù),或設置成MSGPEEK用來向緩沖區(qū)填入接收到的數(shù)據(jù)。對于套接字來說,如果數(shù)據(jù)按照輸入的隊列接收過來的,recv()函數(shù)返回讀入數(shù)據(jù)的字節(jié)數(shù),否則,recv()將返回SOCKET_ERROR,并且WSAGetLastError()給出具體的錯誤。在默認的狀態(tài)下,當套接字由socket()函數(shù)創(chuàng)建后,它被設置為對I/O操作的阻塞狀態(tài)。 就要用到WSAAsyncSelect()函數(shù)。它預先在特定的時間發(fā)生時,指定一個送往應用程序的Windows消息。聲明如下: intWSAAsyncSelect(SOCKET s,HWND hWnd,unsigned int wMsg long lEvent);參數(shù)hWnd指定將要發(fā)送消息的窗口句柄,這個消息時由參數(shù)wMsg指定的。通常wMsg指定一個用戶定義的消息WM_USER+n參數(shù)lEvent指定讓WinSock發(fā)送消息的事件,這個值由以下狀態(tài)通過操作符(|)結(jié)合而來:FD_READ 數(shù)據(jù)正等待被讀入FD_WRITE 套接字正準備寫數(shù)據(jù)FD_OOB 帶外數(shù)據(jù)正等待被讀入。FD_ACCEPT 一個新來的連接正等待被接收。FD_CONNECT 套接字連接已經(jīng)完成FD_CLOSE 套接字連接已經(jīng)關(guān)閉。當完成一個套系在操作后,就要用closesocket()函數(shù)將它關(guān)閉。 windows的消息系統(tǒng) Windows 程序時基于一種事件驅(qū)動的編程模式,這就意味著應用程序所要做的大部分工作時隨著Windows消息的變化而進行的。在本程序的實現(xiàn)過程中,涉及大量的系統(tǒng)消息處理和自定義消息的處理。因此,用到如何使用處理C++類的消息。 消息的種類 應用程序所要做的每項工作幾乎都是基于處理Windows消息的,這些消息以三種基本形式出現(xiàn):常用的Windows、控件通知和命令。 Windows消息的ID通常加上前綴WM_,例如WM_QUIT。這些前綴為WM_的消息代表發(fā)生在應用程序中的窗口和視圖處理消息(MFC為這些消息中的絕大部分提供了默認的操作)。 控件消息是由子窗口傳向主窗口的WM_COMMAND消息。例如,只要編輯控件的當前內(nèi)容被改變,它就會傳遞一個EN_CHANGE消息到主窗口(通常是對話框)。Windows消息控件通知通常由窗口對象來處理,即由類CWnd所派生的對象處理。 命令是由菜單、按鈕(包括工具條)和快捷鍵傳遞來的WM_COMMAND消息。很多類可以處理命令消息,其中包括文檔、文檔模板、窗口、視圖和應用程序及本身。 MFC中的消息處理 MFC為窗口下的消息處理提供了一種框架,使其使用起來比傳統(tǒng)的Windows程序下做控件的消息處理的swithc …case語句和if…else語句更為簡單。這是由于從CTarge派生的類能夠擁有自己的消息映射。MFC用用戶類的消息映射來決定怎樣處理已經(jīng)給定的消息。使我們能最大限度的利用C++語言的優(yōu)點將我們的類進行功能性封裝,這樣,由這些類所創(chuàng)建的其他類就不用再次重復操作。 MFC為了進一步擴展重復使用性,它為大多數(shù)Windows應用程序,甚至范圍更廣的命令提供了默認操作。大多數(shù)有默認操作的命令同時也被包含在由AppWizard產(chǎn)生的默認菜單中。,例如,F(xiàn)ile|New菜單項產(chǎn)生一個有ID號為ID_FILE_NEW消息。其他的標準命令也有同樣的命名規(guī)則,這個規(guī)則就是ID_+菜單名+命令名。如果想執(zhí)行這些標準操作之一,可以從應用程序中的任何一處發(fā)送一則預定義號的命令消息,這一消息就能被MFC進行默認處理。當然,也可以對這些命令實現(xiàn)自己的處理。 用ClassWizard進行消息處理 對于絕大多數(shù)的消息處理任務來說,ClassWizard能提供極大的幫助。ClassWizard通過使用其中的消息映射項,能將消息映射成各種類所對應的處理程序。在程序設計階段,可以使用View菜單或用Ctrl+W來啟動ClassWizard。選擇消息映射鍵后。 如果在工作區(qū)中有多個任務,首先需要在Project項中選擇合適的入口,然后在類名項中選擇一個由CCmdTarge所創(chuàng)建的類。這樣將給我們提供一個對象ID列表,這些對象所接收到的消息以及在成員函數(shù)中已經(jīng)實現(xiàn)了的成員函數(shù)表。 “Project”項指項目名稱列表。“Class name”項指類名列表。 “Object IDs”項出現(xiàn)的對象有三種不同的類型:在“Class name”中列出的類,菜單項對象以及其他在“Class name”中所選的類傳遞消息的控件。 當從“Object IDs”項中選擇類名時,會在“Messages”項中列出選中項所能接收的所有Windows消息(也包括一些函數(shù),如InitInstance或Create,這根本不是消息處理程序。然而,ClassWizard允許與在別處一樣管理這些函數(shù))。ClassWizard對所有可見的Windows只顯示特定的幾個項,這是基于“Class Info”頁中的消息過濾器,它幫助我們把在特定的類中不常處理的消息選出來。如果想處理一個沒有列出的消息,就試著換一個消息過濾器。 在“Object IDs”中列出的三個種類形的對象都是可以向類發(fā)送消息的控件。對于一些簡單的控件按鈕,我們只能接到有限的消息,如BN_CLICKED和BN_DOUBLECLIECKED。對復雜一些的對象,如編輯控件,就能處理許多不同的控件通知。當從“Object IDs”選擇了菜單命令,如IDC_LOGIN時,就會在Message向看到兩個入口,分別時BN_CLICKED(單擊事件)和BN_DOUBLECLICKED(雙擊事件)。如果再選擇BN_CLICKED,就會在“Member functions”項中看到與該事件對應的處理函數(shù),“Edit Code”、“Delete Function”和“Add Function”分別指編輯,刪除和添加給處理函數(shù)。 創(chuàng)建消息映射 當用AppWizard或ClassWizard產(chǎn)生了一個類時,Visual C++會為創(chuàng)建的類制造一個代碼,以創(chuàng)建的一個消息映射。如果在ClassWizard之外創(chuàng)建了自己的CcmndTarget派生類,就要創(chuàng)建消息映射,首先應該在類說明之后增加下面一行: DECLARE_MESSAGE_MAP()。 消息映射由系列的宏創(chuàng)建,從BEGIN_MESSAGE_MAP()開始,以END_MESSAGE_MAP()結(jié)束。 1)填充消息映射 可以對不同類型的消息使用幾個不同的宏來填充消息映射,包括消息范圍。 ①,預定義的Windows消息處理程序 對于許多標準Windows消息。這些宏名直接來自于消息ID,并且他們沒有參數(shù)。例如WM_PAINT可以被宏ON_WM_PAINT()映射上來,并把WM_PAINT消息映射到類中的OnPaint()函數(shù)中。其他的標準Windows消息以相似的方式實現(xiàn)。 ②,其他Windows消息 對于用戶定義的消息或?qū)]有默認處理的Windows命令,我們可使用宏ON_MESSAGE(),它帶有消息ID和處理函數(shù)名: ON_MESSAGE(WM_USER+1,OnMyUserMessage)這些函數(shù)聲明如下:afx_msg LRESULT OnMyUserMessage(WPARAM wparam,LPARAM lparam)。 ③,命令消息 對于命令消息,可以使用ON_COMMAND宏,它采用ID命令和處理函數(shù)名,如下: ON_COMMAND(ID_FILE_NEW,CwinApp::onFileNew)它還處理函數(shù)參數(shù),并返回void,如下:afx_msg void OnFileNew()。 ④,控件通知 由控件得到的通知可由ON_CORTROL()映射得到,此宏采用控件ID,命令I(lǐng)Dd和處理函數(shù)作為參數(shù), ON_CONTROL(BN_CLICKED,IDC_MY_BUTTON,OnMyButtonClicked)這些消息的處理程序如同命令消息一樣無參數(shù),并返回void: afx_msg OnMyButtonclicked()。 ⑤,已經(jīng)注冊的消息 對于從RegisterwindowsMessage()函數(shù)得到的消息ID,可以使用ON_REGISEREDMESSAGE()。它采用已注冊的消息ID和處理函數(shù)。處理程序仍無參數(shù),并返回void。 2)實現(xiàn)處理函數(shù) 當用ClassWizard增加處理函數(shù)時,就會在創(chuàng)建處理函數(shù)的同時,提供恰當?shù)膮?shù)和返回類型。如果創(chuàng)建自己的消息映射入口,并自行匹配處理函數(shù),應注意按消息映射入口所希望的方式來說明處理函數(shù)和返回類型。 3)自定義消息的處理 由于Windows是事件驅(qū)動的環(huán)境,用戶常常需要增加一些自定義的消息。ClassWizard不允許增加用戶自定義消息,所有必須手工輸入。 當開發(fā)Windows應用程序時,Microsoft推薦用戶自定義消息至少WM_USER+100。 第二,實現(xiàn)消息處理函數(shù)。該函數(shù)使用WPARAM和LPARAM參數(shù)并返回LRESULT 第三,在類頭文件的AFX_MEG塊中說明消息處理函數(shù)。 最后,在用戶類的消息映射塊中,使用ON_MESSAGE宏指令將消息映射到消息處理函數(shù)中。 4
點擊復制文檔內(nèi)容
外語相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1