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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

IPAddress類

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

IPHostEntry類

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

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

【例6-1】輸出本機(jī)IP地址及主機(jī)名。新建控制臺(tái)項(xiàng)目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);}}}知識(shí)引入任務(wù)1服務(wù)器端功能實(shí)現(xiàn)2.端口

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

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

3.Socket套接字

知識(shí)引入任務(wù)1服務(wù)器端功能實(shí)現(xiàn)Socket是基于TCP/IP的編程接口,是種網(wǎng)絡(luò)通信機(jī)制,socket的英文原義是“孔”或“插座”。作為進(jìn)程通信機(jī)制,通常也稱作“套接字”,用于描述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);實(shí)例方法:Socket.Send:從數(shù)據(jù)中的指示位置開始將數(shù)據(jù)發(fā)送到連接的SocketSocket.Receive:將數(shù)據(jù)從連接的Socket接收到接收緩沖區(qū)的特定位置Socket.Bind:使Socket與一個(gè)本地終結(jié)點(diǎn)相關(guān)聯(lián)Socket.Listen:將Socket置于偵聽狀態(tài)Socket.Accept:創(chuàng)建新的Socket以處理傳入的連接請(qǐng)求Socket.Close:強(qiáng)制Socket連接關(guān)閉

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

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

【例6-2】編寫服務(wù)端程序,建立指定端口的連接,監(jiān)聽連接的客戶端發(fā)送的信息。程序主界面如圖所示:知識(shí)引入任務(wù)1服務(wù)器端功能實(shí)現(xiàn)【例6-2】新建windows窗體應(yīng)用程序,添加控件并設(shè)置屬性如表所示:知識(shí)引入任務(wù)1服務(wù)器端功能實(shí)現(xiàn)控件屬性值Form1TextSocket服務(wù)器Form1Size600,400Lable1Text服務(wù)器端口TextBox1Text5678TextBox1NametxtPortButton1Text開始監(jiān)聽Button1NamebtnStartTextBox2NametxtLogTextBox2MultilinetrueTextBox3NametxtMsgTextBox3MultilinetrueButton2Text發(fā)送信息Button2NamebtnSend【例6-2】編寫窗口事件代碼知識(shí)引入任務(wù)1服務(wù)器端功能實(shí)現(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)建一個(gè)負(fù)責(zé)通訊的SocketsocketSend=SocketWatch.Accept();ShowMsg(socketSend.RemoteEndPoint.ToString()+"---連接成功!"+":"+GetCurrentTime());ThreadThRecive=newThread(Recive);ThRecive.IsBackground=true;ThRecive.Start(socketSend);}}【例6-2】編寫窗口事件代碼知識(shí)引入任務(wù)1服務(wù)器端功能實(shí)現(xiàn)//不斷調(diào)用接收消息的方法voidRecive(objectobj){SocketSocketSend=objasSocket;while(true){try{//創(chuàng)建一個(gè)數(shù)組儲(chǔ)存客戶端發(fā)過來的消息byte[]buffer=newbyte[1024*1024*2];//實(shí)際收到的有效字節(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){//取消對(duì)線程間的錯(cuò)誤檢查Control.CheckForIllegalCrossThreadCalls=false;}privatevoidbtnSend_Click(objectsender,EventArgse){stringstr=this.txtMsg.Text.Trim();byte[]buffer=System.Text.Encoding.UTF8.GetBytes(str);socketSend.Send(buffer);}//獲取當(dāng)前系統(tǒng)時(shí)間的方法

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

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

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

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

客戶端功能實(shí)現(xiàn)1.建立服務(wù)器連接Socket.Connect(IPEndPointpoint)方法:創(chuàng)建與指定服務(wù)器IP和端口號(hào)的連接。2.Socket網(wǎng)絡(luò)編程客戶端編程步驟(1)創(chuàng)建用于連接的Socket對(duì)象(2)用指定的端口號(hào)和服務(wù)器的ip建立一個(gè)EndPoint對(duì)象(3)用socket對(duì)象的Connect()方法向服務(wù)器發(fā)出連接請(qǐng)求(4)如果連接成功,就用socket對(duì)象的Send()方法向服務(wù)器發(fā)送信息(5)用socket對(duì)象的Receive()方法接受服務(wù)器發(fā)來的信息(6)通信結(jié)束關(guān)閉socket。任務(wù)2客戶端功能實(shí)現(xiàn)知識(shí)引入【例6-3】編寫客戶端程序,與服務(wù)器建立指定端口的連接,與服務(wù)器端實(shí)現(xiàn)信息的發(fā)送的接收。程序主界面如圖所示:任務(wù)2客戶端功能實(shí)現(xiàn)知識(shí)引入【例6-3】編寫窗口事件代碼:任務(wù)2客戶端功能實(shí)現(xiàn)知識(shí)引入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));//獲得要連接的遠(yuǎn)程服務(wù)器應(yīng)用程序的IP地址和端口號(hào)socketSend.Connect(point);ShowMsg(socketSend.RemoteEndPoint+"---"+"連接成功!:"+GetCurrentTime());Threadth=newThread(Recive);th.IsBackground=true;th.Start();}catch(Exception){ShowMsg("遠(yuǎn)程服務(wù)器為打開或網(wǎng)絡(luò)未連接!");ShowMsg("連接失??!");}}voidRecive(){try{while(true){byte[]buffer=newbyte[1024*1024*2];//實(shí)際接收到的有效字符串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客戶端功能實(shí)現(xiàn)知識(shí)引入voidShowMsg(stringstr){txtLog.AppendText(str+"\r\n");}privatevoidbtnSend_Click(objectsender,EventArgse){try{

溫馨提示

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

評(píng)論

0/150

提交評(píng)論