物聯(lián)網(wǎng).NET開發(fā)(第二版) 課件 項目六 ATM機自動報警系統(tǒng)_第1頁
物聯(lián)網(wǎng).NET開發(fā)(第二版) 課件 項目六 ATM機自動報警系統(tǒng)_第2頁
物聯(lián)網(wǎng).NET開發(fā)(第二版) 課件 項目六 ATM機自動報警系統(tǒng)_第3頁
物聯(lián)網(wǎng).NET開發(fā)(第二版) 課件 項目六 ATM機自動報警系統(tǒng)_第4頁
物聯(lián)網(wǎng).NET開發(fā)(第二版) 課件 項目六 ATM機自動報警系統(tǒng)_第5頁
已閱讀5頁,還剩27頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

ATM機自動報警系統(tǒng)任務(wù)1:服務(wù)器端功能實現(xiàn)任務(wù)2:客戶端功能實現(xiàn)項目六ATM機自動報警系統(tǒng)模擬了ATM機終端用戶在發(fā)生突發(fā)事件后通過“報警”按鈕向監(jiān)控服務(wù)端發(fā)送信息后,服務(wù)端通過接收信息進行相應(yīng)處理的系統(tǒng)解決方案。在項目中,ATM終端用戶主要模擬“報警”、“撤消報警”兩個操作,服務(wù)器端主要包括模擬“出警”、“撤消警告”兩個操作。計算機網(wǎng)絡(luò)將現(xiàn)實生活中的不同終端連接到一起,網(wǎng)絡(luò)中的計算機可以通過IP地址和端口號進行數(shù)據(jù)的通信,ATM機自動報警系統(tǒng)是一種點對點的通信方式,C#中的Socket網(wǎng)絡(luò)編程基于TCP/IP協(xié)議,為實現(xiàn)C/S結(jié)構(gòu)的網(wǎng)絡(luò)通信提供了解決方案。項目引入理解TCP/IP、IP地址、端口、套接字的概念理解C/S網(wǎng)絡(luò)編程概念掌握Socket編程方法

學習目標服務(wù)器端:首先運行ATM服務(wù)器端監(jiān)控程序,運行效果如圖6-1所示:項目描述點擊開始監(jiān)控,服務(wù)器對端口進行監(jiān)控,文本框中顯示日志信息,此時“出警”和“銷警”按鈕不可用。如圖6-2所示:當有客戶端點擊“報警”按鈕,文本框顯示“報警信息”,對應(yīng)的標簽顯示為“紅色”,同時“出警”和“銷警”按鈕恢復為可用狀態(tài),效果如圖6-3所示:項目描述點擊“出警”按鈕,文本框顯示“出警信息”,對應(yīng)的標簽顯示為“藍色”,效果如圖6-4所示:點擊“銷警”按鈕,文本框顯示“銷警信息”,對應(yīng)的標簽顯示為“灰色”,效果如圖6-5所示:項目描述客戶端:客戶端運行后,自動連接服務(wù)器端,主界面效果如圖6-6所示:點擊“報警”按鈕,標簽變?yōu)椤凹t色”,文本框顯示“報警”日志信息,效果如圖6-7所示:項目描述如果收到服務(wù)器端“出警”信息,標簽變?yōu)椤八{色”,文本框顯示“出警”日志信息,效果如圖6-8所示:點擊“銷警”按鈕,文本框顯示“請求銷警”日志信息,效果如圖6-9所示:項目描述如果收到服務(wù)器端“銷警”信息,標簽變?yōu)椤盎疑保谋究蝻@示“銷警”日志信息,效果如圖6-10所示:任務(wù)1:服務(wù)器端功能實現(xiàn)任務(wù)2:客戶端功能實現(xiàn)工作任務(wù)任務(wù)描述服務(wù)器端創(chuàng)建連接后,要實現(xiàn)客戶端的信息監(jiān)控,當客戶端發(fā)送“報警”信息后,服務(wù)器端接收到信息要進行相應(yīng)的“出警”處理,當客戶端請求“撤消報警”后,服務(wù)器端接收到信息后要進行相應(yīng)的“撤消警告”處理。任務(wù)1服務(wù)器端功能實現(xiàn)1.IP地址

Internet通過網(wǎng)絡(luò)將計算機連接在一起,每一臺計算機都有自己的一個地址,信息在網(wǎng)絡(luò)中傳輸遵循網(wǎng)絡(luò)傳輸協(xié)議TCP/IP協(xié)議,按照TCP/IP協(xié)議,IP地址由一組二進制數(shù)組成,IP地址包括IPV4和IPV6,分別由32位和64位二進制數(shù)組成,目前使用較多的為IPV4地址,為方便使用,IP地址經(jīng)常使用十進制數(shù)來描述,每8位二進制數(shù)轉(zhuǎn)換成一個十進制數(shù),中間用“.”分隔。如:26。C#中System.Net命名空間為網(wǎng)絡(luò)編程提供支持類,System.Net.Sockets命名空間為Socket編程提供支持類。

IPAddress類

功能:提供主機的IP地址及相關(guān)信息。

IPHostEntry類

功能:提供主機的IP地址、主機名及別名。主要屬性:AddressList:返回IPAddress[],獲取或設(shè)置與主機關(guān)聯(lián)的IP地址列表。HostName:返回string[],獲取或設(shè)置主機的DNS名稱。知識引入任務(wù)1服務(wù)器端功能實現(xiàn)1.IP地址

IPEndPoint類功能:將網(wǎng)絡(luò)端點表示為IP地址和端口號。通過IP地址和端口號的組合,構(gòu)造主機的連接點。主要屬性:Address:獲取或設(shè)置終結(jié)點IP地址。AddressFamily:獲取網(wǎng)絡(luò)協(xié)議(IP)地址族。AddressFamily.InterNetwork表示此IP為IPv4,AddressFamily.InterNetworkV6表示此地址為IPv6類型。Port:獲取或設(shè)置終結(jié)點的端口號。Dns類功能:提供簡單的域名解析功能。主要屬性:GetHostName:獲取本地計算機的主機名。GetHostAddresses:返回指定主機的Internet協(xié)議(IP)地址。GetHostEntry:將主機名或IP地址解析為IPHostEntry實例。知識引入任務(wù)1服務(wù)器端功能實現(xiàn)1.IP地址

【例6-1】輸出本機IP地址及主機名。新建控制臺項目IPGet,編寫代碼如下:namespaceIPGet{classProgram{staticvoidMain(string[]args){stringhostName=Dns.GetHostName();IPHostEntrylocalhost=Dns.GetHostEntry(hostName);stringip="";for(inti=0;i<localhost.AddressList.Length;i++){if(localhost.AddressList[i].AddressFamily==AddressFamily.InterNetwork){ip=localhost.AddressList[i].ToString();}}Console.WriteLine("hostName:"+hostName);Console.WriteLine("localIp:"+ip);}}}知識引入任務(wù)1服務(wù)器端功能實現(xiàn)2.端口

知識引入任務(wù)1服務(wù)器端功能實現(xiàn)

在網(wǎng)絡(luò)連接中,端口分為物理端口和邏輯端口,物理端口指計算機硬件的I/O端口,邏輯端口指邏輯意義上用于區(qū)分服務(wù)的端口,如TCP/IP協(xié)議中的服務(wù)端口,端口號的范圍從0到65535。每一個網(wǎng)絡(luò)連接都需要一個端口號,一般來說,每個端口都對應(yīng)著一種應(yīng)用程序。要建立客戶機與服務(wù)器之間的連接通信,必須選擇一個端口進行連接,端口號0-1023是標準的Internet協(xié)議保留端口,用戶創(chuàng)建程序自定義端口號范圍一般為8000-16000。

3.Socket套接字

知識引入任務(wù)1服務(wù)器端功能實現(xiàn)Socket是基于TCP/IP的編程接口,是種網(wǎng)絡(luò)通信機制,socket的英文原義是“孔”或“插座”。作為進程通信機制,通常也稱作“套接字”,用于描述IP地址和端口。Socket是基于連接的通信,在通信開始前通信雙方通過確定身份(IP地址和端口)建立連接通道,然后通過連接通道傳送信息。通信結(jié)束后關(guān)閉連接。Socket類構(gòu)造方法:publicSocket(AddressFamilyaddressFamily,SocketTypesocketType,ProtocolTypeprotocolType)addressFamily:指定Socket使用的尋址方案socketType:指定Socket的類型protocolType:指定Socket使用的協(xié)議例:SocketSocketWatch=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);實例方法:Socket.Send:從數(shù)據(jù)中的指示位置開始將數(shù)據(jù)發(fā)送到連接的SocketSocket.Receive:將數(shù)據(jù)從連接的Socket接收到接收緩沖區(qū)的特定位置Socket.Bind:使Socket與一個本地終結(jié)點相關(guān)聯(lián)Socket.Listen:將Socket置于偵聽狀態(tài)Socket.Accept:創(chuàng)建新的Socket以處理傳入的連接請求Socket.Close:強制Socket連接關(guān)閉

4Socket網(wǎng)絡(luò)編程服務(wù)器端編程步驟

知識引入任務(wù)1服務(wù)器端功能實現(xiàn)(1)創(chuàng)建用于監(jiān)聽連接的Socket對象(2)用指定的端口號和服務(wù)器的ip建立一個EndPoint對象(3)Bind()方法綁定EndPoint(4)Listen()方法開始監(jiān)聽(5)有客戶端連接,Accept()方法創(chuàng)建一個新的用于和客戶端進行通信的socket實例(6)通信(7)通信結(jié)束關(guān)閉socket。

【例6-2】編寫服務(wù)端程序,建立指定端口的連接,監(jiān)聽連接的客戶端發(fā)送的信息。程序主界面如圖所示:知識引入任務(wù)1服務(wù)器端功能實現(xiàn)【例6-2】新建windows窗體應(yīng)用程序,添加控件并設(shè)置屬性如表所示:知識引入任務(wù)1服務(wù)器端功能實現(xiàn)控件屬性值Form1TextSocket服務(wù)器Form1Size600,400Lable1Text服務(wù)器端口TextBox1Text5678TextBox1NametxtPortButton1Text開始監(jiān)聽Button1NamebtnStartTextBox2NametxtLogTextBox2MultilinetrueTextBox3NametxtMsgTextBox3MultilinetrueButton2Text發(fā)送信息Button2NamebtnSend【例6-2】編寫窗口事件代碼知識引入任務(wù)1服務(wù)器端功能實現(xiàn)privatevoidbtnStart_Click(objectsender,EventArgse){try{SocketSocketWatch=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);IPAddressip=IPAddress.Any;IPEndPointpoint=newIPEndPoint(ip,Convert.ToInt32(txtPort.Text));SocketWatch.Bind(point);ShowMsg("監(jiān)聽成功!"+":"+GetCurrentTime());SocketWatch.Listen(10);ThreadTh=newThread(Listen);Th.IsBackground=true;Th.Start(SocketWatch);}

catch(Exception){ MessageBox.Show("連接失?。?);}}SocketsocketSend;voidListen(objectobj){SocketSocketWatch=objasSocket;while(true){//等待客戶端連接,并創(chuàng)建一個負責通訊的SocketsocketSend=SocketWatch.Accept();ShowMsg(socketSend.RemoteEndPoint.ToString()+"---連接成功!"+":"+GetCurrentTime());ThreadThRecive=newThread(Recive);ThRecive.IsBackground=true;ThRecive.Start(socketSend);}}【例6-2】編寫窗口事件代碼知識引入任務(wù)1服務(wù)器端功能實現(xiàn)//不斷調(diào)用接收消息的方法voidRecive(objectobj){SocketSocketSend=objasSocket;while(true){try{//創(chuàng)建一個數(shù)組儲存客戶端發(fā)過來的消息byte[]buffer=newbyte[1024*1024*2];//實際收到的有效字節(jié)數(shù)intr=SocketSend.Receive(buffer);stringstr=Encoding.UTF8.GetString(buffer,0,r);//將buffer轉(zhuǎn)化成字符串形式if(r==0){break;

}ShowMsg(SocketSend.RemoteEndPoint.ToString()+"---"+str+":"+GetCurrentTime());}catch(Exception){MessageBox.Show("連接失??!");}}}//文本框追加方法voidShowMsg(stringstr){this.txtLog.AppendText(str+"\r\n");}privatevoidForm1_Load(objectsender,EventArgse){//取消對線程間的錯誤檢查Control.CheckForIllegalCrossThreadCalls=false;}privatevoidbtnSend_Click(objectsender,EventArgse){stringstr=this.txtMsg.Text.Trim();byte[]buffer=System.Text.Encoding.UTF8.GetBytes(str);socketSend.Send(buffer);}//獲取當前系統(tǒng)時間的方法

staticDateTimeGetCurrentTime(){DateTimecurrentTime=newDateTime();currentTime=DateTime.Now;returncurrentTime;}任務(wù)1

服務(wù)器端功能實現(xiàn)任務(wù)實現(xiàn)新建windows窗體應(yīng)用程序,程序主界面如圖所示:任務(wù)1

服務(wù)器端功能實現(xiàn)任務(wù)實現(xiàn)編寫窗口事件代碼操作演示Socket網(wǎng)絡(luò)編程需要引用命名空間System.Net.Sockets、System.Net。先運行服務(wù)器端程序進入監(jiān)控,后運行客戶端程序。在Form_Load事件中設(shè)置Control.CheckForIllegalCrossThreadCalls=false;取消對線程間的錯誤檢查。任務(wù)1

服務(wù)器端功能實現(xiàn)任務(wù)小結(jié)任務(wù)描述進入系統(tǒng)后要求輸入用戶名及密碼,用戶名為“admin”和密碼為“123456”,如果用戶名或密碼輸入錯誤,則輸出錯誤提示信息并累計錯誤次數(shù),如果錯誤次數(shù)達到三次,系統(tǒng)提示“用戶名或密碼輸入錯誤已達三次!系統(tǒng)將自動退出!”,系統(tǒng)自動退出,如果用戶名及密碼輸入正確,則顯示“歡迎進入聯(lián)通手機充值系統(tǒng)”。任務(wù)2

客戶端功能實現(xiàn)1.建立服務(wù)器連接Socket.Connect(IPEndPointpoint)方法:創(chuàng)建與指定服務(wù)器IP和端口號的連接。2.Socket網(wǎng)絡(luò)編程客戶端編程步驟(1)創(chuàng)建用于連接的Socket對象(2)用指定的端口號和服務(wù)器的ip建立一個EndPoint對象(3)用socket對象的Connect()方法向服務(wù)器發(fā)出連接請求(4)如果連接成功,就用socket對象的Send()方法向服務(wù)器發(fā)送信息(5)用socket對象的Receive()方法接受服務(wù)器發(fā)來的信息(6)通信結(jié)束關(guān)閉socket。任務(wù)2客戶端功能實現(xiàn)知識引入【例6-3】編寫客戶端程序,與服務(wù)器建立指定端口的連接,與服務(wù)器端實現(xiàn)信息的發(fā)送的接收。程序主界面如圖所示:任務(wù)2客戶端功能實現(xiàn)知識引入【例6-3】編寫窗口事件代碼:任務(wù)2客戶端功能實現(xiàn)知識引入SocketsocketSend;privatevoidbtnConnect_Click(objectsender,EventArgse){try{socketSend=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);IPAddressip=IPAddress.Parse(txtServer.Text);IPEndPointpoint=newIPEndPoint(ip,Convert.ToInt32(txtPort.Text));//獲得要連接的遠程服務(wù)器應(yīng)用程序的IP地址和端口號socketSend.Connect(point);ShowMsg(socketSend.RemoteEndPoint+"---"+"連接成功!:"+GetCurrentTime());Threadth=newThread(Recive);th.IsBackground=true;th.Start();}catch(Exception){ShowMsg("遠程服務(wù)器為打開或網(wǎng)絡(luò)未連接!");ShowMsg("連接失敗!");}}voidRecive(){try{while(true){byte[]buffer=newbyte[1024*1024*2];//實際接收到的有效字符串intr=socketSend.Receive(buffer);stringstr=Encoding.UTF8.GetString(buffer,0,r);if(r==0){break;}ShowMsg(socketSend.RemoteEndPoint+"---\r\n"+str+":"+GetCurrentTime());}}catch(Exception){MessageBox.Show("連接失?。?);}}【例6-3】編寫窗口事件代碼:任務(wù)2客戶端功能實現(xiàn)知識引入voidShowMsg(stringstr){txtLog.AppendText(str+"\r\n");}privatevoidbtnSend_Click(objectsender,EventArgse){try{

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論