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

正文內(nèi)容

基于c的遠程液位監(jiān)控軟件設(shè)計畢業(yè)設(shè)計(論文)(編輯修改稿)

2024-08-16 08:28 本頁面
 

【文章內(nèi)容簡介】 AsyncCallBack:代表回調(diào)函數(shù) ; state: 代表 狀態(tài)信息,必須 確保 state中包含 socket 的句 ; 調(diào)用 BeginAccept 方法的根本流程是: 建立本機 終節(jié)點,湖南理工學院畢業(yè)設(shè)計(論文) 9 并 建立 新的 socket 與 本機 終節(jié)點進行綁定; 在端口上 監(jiān)聽 是否有新的連接申請; 申請開始接入新的連接 ,將其傳入 Socket 的實例或者 StateOjbect 的實例。 調(diào)用 BeginAccept()方法 完成 后, 當有 新的連接 產(chǎn)生 , 就會使用 回調(diào)函數(shù),此 回調(diào)函數(shù) 一定 得 包含 用于 終結(jié) 接入連接操作的 EndAccept()方法 ,其原型為: Socket EndAccept(IAsyncResult iar)。 那么服務(wù)器構(gòu)建代碼如下: public static void StartListening() { IPAddress local = (,0,1)。 IPEndPoint iep = new IPEndPoint(local,13000)。 Socket listener = new Socket(, )。 (iep)。 (20)。 (new AsyncCallback(Accept), listener)。 } void Accept(IAsyncResult iar) { Socket MyServer = (Socket)。 Socket service = (iar)。 } ( 2)發(fā)送與接收數(shù)據(jù) 在 創(chuàng)建 了套接字的連接后,就 能夠 使服務(wù)器端和客戶端之間進行數(shù)據(jù) 通信了。異步 通信 用 BeginSend 和 EndSend 方法來 完成 數(shù)據(jù)發(fā)送。在 使用 BeginSend方法前要確認雙方都已成功連接, 不然 會出錯誤。 BeginSend 方法原型為: (Byte[],Int32, Int32, SocketFlags, AsyncCallback, Object); 參數(shù)如下: buffer: Byte 類型的數(shù)組,包含將發(fā)送的數(shù)據(jù); offset: buffer 參數(shù)中發(fā)送數(shù)據(jù)的起始位置,該位置從零開始計數(shù); size:將發(fā)送的字節(jié)數(shù);socketFlags: SocketFlags 值的按位組合; callback: AsyncCallback 委托;state:一個對象,包含此申請的狀態(tài)消息;返回值:調(diào)用異步通訊發(fā)送IAsyncResult。創(chuàng)建一個完成 AsyncCallback 的回調(diào)方法并將名字傳入 湖南理工學院畢業(yè)設(shè)計(論文) 10 BeginSend 方法。 state 參數(shù)一定得包含用來通訊的連接。如果回調(diào)要求更多信息,那么可構(gòu)建一個小型的類用于存儲 Socket和其他必須的信息。經(jīng)過 state 參數(shù)將此類的一個實例傳遞給 BeginSend 方法?;卣{(diào)方法應(yīng)使用 EndSend 方法。當應(yīng)用程序使用 BeginSend 方法時,系統(tǒng)將運用一個單獨的線程完成特定的回調(diào)方法,并阻止 EndSend,直到 Socket 發(fā)送了申請的字節(jié)數(shù)或引發(fā)了異常。相關(guān)代碼如下: private static void Send(Socket handler, String data) { byte[] byteData = (data)。 (byteData,0,0,new AsyncCallback(SendCallback), handler)。 } private static void SendCallback(IAsyncResult ar) { try { Socket handler = (Socket)。 int bytesSent = (ar)。 ()。 ()。 } catch (Exception e) { } } 異步通信用 BeginReceive 和 EndReceive 方法 來接收數(shù)據(jù),其 BeginReceive方法原型為: (Byte[],Int32,Int32,SocketFlags,AsyncCallback,Object) 參數(shù)如下: buffer: Byte 類型的數(shù)組,它是保存接收到的數(shù)據(jù)的位置; offset:buffer 參數(shù)中保存所接收數(shù)據(jù)的位置,該位置從零開始計數(shù); size:要接收的字節(jié)數(shù); socketFlags : SocketFlags 值的按位組合; callback:一個AsyncCallback 委托,它援用操作完成時要應(yīng)用的方法; state:一個用戶定義對象,其中寶庫接收操作的相干信息。操作完成時,此對象會傳軟 EndReceive方法;返回值:使用異步方法讀取 IAsyncResult。異步 BeginReceive 操作應(yīng)使湖南理工學院畢業(yè)設(shè)計(論文) 11 用 EndReceive 方法完成。一般該方法由 callback 實現(xiàn)。在操作完成前方法不會進入阻塞狀態(tài)。如需一直阻塞到操作完成時則應(yīng)使用 Receive 方法進行重載。相關(guān)代碼如下: private static void Receive(Socket client) { try { StateObject state = new StateObject()。 = client。 (,0,0,new AsyncCallback(ReceiveCallback), state)。 } catch (Exception e) { } } private static void ReceiveCallback(IAsyncResult ar) { try { StateObject state = (StateObject)。 Socket client = 。 int bytesRead = (ar)。 if (bytesRead 0) { ((,0,bytesRead)。 (,0,0,new AsyncCallback(ReceiveCallback), state)。 } else { 湖南理工學院畢業(yè)設(shè)計(論文) 12 if ( 1) { response = ()。 } ()。 } } catch (Exception e) { } } 這里對接收的數(shù)據(jù)做了一些處理, 首先處理連接的回調(diào)函數(shù)里 獲得 的通訊套接字 client, 然后 開始接收數(shù)據(jù) 。 當數(shù)據(jù)發(fā)送到緩沖區(qū)中, BeginReceive 方法嘗試 從 buffer 數(shù)組中 獲取 長度為 的數(shù)據(jù)塊,并且返回接收到的數(shù)據(jù)量 bytesRead。 經(jīng)過判斷返回值 bytesRead的大小來判斷數(shù)據(jù)是否傳輸完全。這里出現(xiàn)了 Set()方法,引出了 程序阻塞 和 異步中的同步問題 。 .Net 里提供了 EventWaitHandle 類來表示一個線程的同步事件。EventWaitHandle 即事件等待句柄,他允 許線程通過操作系統(tǒng)互發(fā)信號和等待彼此的信號來達到線程同步的目的。這個類有 2個子類,分別為 AutoRestEevnt(自動重置 )和 ManualRestEvent(手動重置 )。下面是線程同步的幾個方法: (1)Rset 方法:將事件狀態(tài)設(shè)置為非終止狀態(tài),使得線程阻塞。這里的線程阻塞是指同意其他需要等候的線程進行阻塞即讓含 WaitOne()方法的線程阻塞; (2)Set 方法:將事件狀態(tài)設(shè)置終止狀態(tài),允許一個或多個等候線程繼續(xù)。該方法發(fā)送一個信號給操作系統(tǒng),讓處于等候的某個線程從阻塞狀態(tài)轉(zhuǎn)變成繼續(xù)運行,即 WaitOne方法的線程不在阻塞; (3)WaitOne 方法:阻塞當前線程,直到當前的等候句柄收到信號。此方法將一直使本線程處于阻塞狀態(tài)直到收到信號為止,即當其他非阻塞進程使用 set方法時可以繼續(xù)執(zhí)行。 客戶端設(shè)計 界面設(shè)計 客戶端界面設(shè)計方法和服務(wù)器方法相同,首先 創(chuàng)建 Windows 窗體應(yīng)用程序,打開工具箱,拖出我們所需的工具控件如: Lable、 Button、 TextBox 等進行界面設(shè)計,之后修改其對應(yīng)的屬性,雙擊后則可進行其他部分的代碼編寫。最終界面如圖 所示。 湖南理工學院畢業(yè)設(shè)計(論文) 13 圖 client 界 面設(shè)計 Socket 編程 客戶端的 Socket 編程同樣分為以下兩個步驟: ( 1)建立客戶端連接 首先要創(chuàng)建 Socket 對象的實例,可以經(jīng)過 Socket 類的構(gòu)造方法來實現(xiàn): Socket socket= new Socket(, )。 然后獲取所要連接的服務(wù)器 IP 地址和端口: IPAddress ip=()。 IPEndPoint iep=new IPEndPoint(ip,11000)。 而后 在同步模式中,客戶端調(diào)用 Connect 方法連接服務(wù)器。在異步模式下,客戶端則 使用 BeginConnect 方法和 EndConnect 方法來 完成 與服務(wù)器的連接 ,BeginConnect 方法原型為: (EndPoint, AsyncCallback, Object); 其參數(shù): remoteEP:表示遠程主機 IP地址和端口號; callback: AsyncCallback委托; state:一個對象,它包含此請求的 狀態(tài)信息;返回值: IAsyncResult,它引用異步連接。 在調(diào)用 BeginConnect 方法時必須注冊相應(yīng)的回調(diào)函數(shù)并且至少傳遞一個 Socket 的實例給 state 參數(shù),以保證 EndConnect 方法中能使用原始的套接字。 調(diào)用代碼如下: private static void StartClient() { 湖南理工學院畢業(yè)設(shè)計(論文) 14 Socket socket=new Socket(,ProtocolType.Tcp)。 IPAddress ip=()。 IPEndPoint iep=new IPEndPoint(ip,13000)。 (iep, new AsyncCallback(Connect),socket)。 } void Connect(IAsyncResult iar) { Socket client=(Socket)。 try { (iar)。 } catch (Exception e) { } } ( 2)發(fā)送與接收數(shù)據(jù) 在建立了套接字的連接后,就可以服務(wù)器端和客戶端之間進行數(shù)據(jù)通信了。異步 通信 用 BeginSend 和 EndSend 方法來負責數(shù)據(jù)的發(fā)送。 前面已經(jīng)介紹,這里不再贅述。 本章小結(jié) 本章先是討論了監(jiān)控軟件的設(shè)計方案,選擇了可靠性高的 TCP/IP 協(xié)議和實效性高的異步通信模式。然后分別講解了服務(wù)器和客戶端的實現(xiàn)代碼,包括界面設(shè)計和 SOCKET 編程設(shè)計。 湖南理工學院畢業(yè)設(shè)計(論文) 15 第 4 章 ActiveX 控件生成與發(fā)布 控件生成與發(fā)布 ActiveX 控件又稱 Ocx 控件,用于遠程液位監(jiān)控系統(tǒng)中組態(tài) 軟件的調(diào)用。本文中使用 C語言生成的 AxtiveX 控件并非真正意義上的 ActiveX 控件,而是 .dll控件,不過足夠滿足 VS20xx, Web 等多種軟件調(diào)用。要生成可供組態(tài)軟件調(diào)用的Ocx 控件,還需做不同的處理。因此本文不做描述,僅介紹 C環(huán)境下生成 .dll控件的方法,具體步驟如下: ( 1) 創(chuàng)建一個應(yīng)用程序解決方案,并添加一個 Windows 控件庫項目 ,如圖 圖 創(chuàng)建解決方案 ( 2) 更改 “ 項目屬性 應(yīng)用程序 程序集信息 ” 設(shè)置,勾選 “ 使程序集 COM 可見 ”,如圖 圖 更改項目屬性 湖南理工學院畢業(yè)設(shè)計(論文) 16 ( 3) 更改 “ 項目屬性 生成 ”屬性 ,勾選 “ 為 COM Interop 注冊 ”( 此處 若是 在debug 狀態(tài)下修改的,那在調(diào)到 release 狀態(tài)下還 應(yīng)該 再設(shè)置一次 )如圖 圖 更改項目屬性 ( 4) 修改 文件, 增加 [assembly: AllowPartially TrustedCallers()]項(需要使用 名稱空間) ,如圖 所示 圖 修改 文件 ( 5) 添加一個 Windows 用戶控件 湖南
點擊復制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1