《《C# WinForm實踐開發(fā)教程》chp7WinForms網(wǎng)絡編程》由會員分享,可在線閱讀,更多相關《《C# WinForm實踐開發(fā)教程》chp7WinForms網(wǎng)絡編程(32頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、單擊此處編輯母版標題樣式,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,*,-,基于,C#,語言,主講教師:錢 哨,本課學時:,72,課時,聯(lián)系方式:,qianshao,Windows,程序設計,第七章、,WinForms,網(wǎng)絡編程,本章主要內(nèi)容介紹,7.1 windows,和窗體,7.2 Visual,Stutio,.net IDE,簡介,7.3,事件處理,CONTENT,本章學習目標:,了解組網(wǎng),通過,WinForms,訪問,Internet,通過,WinForms,進行套接字編程,組網(wǎng)簡介,3-1,打印機在物理上連接至單臺計算機,連接在網(wǎng)絡上的多位用戶,打???,打?。?打?。?/p>
2、,組網(wǎng)是指將網(wǎng)絡中的計算機連接在一起,可共享打印機以供網(wǎng)絡中所有用戶使用,降低了為每個用戶采購打印機而帶來的成本,,充分利用資源,組網(wǎng)簡介,3-2,組網(wǎng)是將許多設備(如計算機、打印機和工作站)連接成一個網(wǎng)絡以共享資源,WinForms,網(wǎng)絡編程中用到,System.Net,和,System.Net.Sockets,命名空間,System.Net,命名空間主要處理高層的操作,例如下載和上載文件,System.Net.Sockets,包含執(zhí)行低層操作的類,,處理用于讓計算機之間高效通信的代碼,組網(wǎng)簡介,3,-3,電源插座,電度表,具有唯一的地址,網(wǎng)絡套接字,使用數(shù)據(jù)包和,IP,地址,IP,地址,唯
3、一地標識,Internet,上的每臺電腦,IP(Internet,協(xié)議,),低層的路由協(xié)議可將數(shù)據(jù)分成很小的數(shù)據(jù)包并通過網(wǎng)絡將它們發(fā)送到某個地址。,TCP,(,傳輸控制協(xié)議,),可靠傳輸數(shù)據(jù)的高層協(xié)議,UDP,(,用戶數(shù)據(jù)報協(xié)議,),支持快速、無連接、不可靠的數(shù)據(jù)包傳輸,訪問,Internet,6,-,1,Internet,應用程序,客戶端應用程序,服務器應用程序,萬維網(wǎng)是一個客戶端,/,服務器應用程序,,借助瀏覽器對世界各地的,Web,服務器上存儲的數(shù)據(jù)進行訪問,WebClient,類,請求文件并從特定,URL,接收文件,不能繼承,具有一些方法可用于從,URI,標識的任何本地,I,ntran
4、et,或,Internet,資源發(fā)送和接收數(shù)據(jù)。,訪問,Internet,6,-,2,URI,用于標識,Internet,上的資源以及通信協(xié)議,路徑標識符從服務器上查找請求的信息,服務器標識符可標識,DNS,主機名或,TCP,地址,模式標識符標識用于通信的協(xié)議,可選查詢字符串將信息從客戶端傳遞至服務器,void,btnGo_Click(object,sender,System.EventArgs,e),WebClient,client=new,WebClient,();,Stream,strm,=,client.OpenRead(txtURI.Text,);,StreamReader,sr,=
5、new,StreamReader(strm,);,string line;,while(line,=,sr.ReadLine,()!=null),lstRecd.Items.Add(line,);,strm.Close,();,訪問,Internet,6,-,5,WebRequest,類,抽象類,封裝與服務器連接、發(fā)送請求和接收響應的詳細信息,使用傳遞至其,Create(),方法的,URI,值創(chuàng)建特定于協(xié)議的實例,對,WebRequest,實例調(diào)用的,GetResponse,(),方法幫助向,Internet,資源發(fā)出請求,屬性,Method,RequestUri,方法,Create(),Ge
6、tRequestStream,(),GetResponse,(),訪問,Internet,6,-,6,WebResponse,類,抽象類,提供來自,URI,的響應。,客戶端應用程序不創(chuàng)建,WebResponse,對象,因為在對,WebRequest,實例調(diào)用,GetResponse,(),方法時會創(chuàng)建它們。,private void,btnGo_Click(object,sender,System.EventArgs,e),WebRequest,wrq,=,WebRequest.Create(txtURI.Text,);,WebResponse,wrs,=,wrq.GetResponse,()
7、;,Stream,strm,=,wrs.GetResponseStream,();,StreamReader,sr,=new,StreamReader(strm,);,string line;,while(line,=,sr.ReadLine,()!=null),lstRecd.Items.Add(line,);,strm.Close,();,使用,WebRequest,和,WebResponse,類實現(xiàn)“執(zhí)行”按鈕的功能,套接字編程,System.Net.Sockets,名稱空間包含允許直接發(fā)送,TCP,網(wǎng)絡請求或偵聽特定端口上的,TCP,網(wǎng)絡請求的相關類,大量的方法和屬性用于網(wǎng)絡連接,提供
8、客戶端連接,用于創(chuàng)建和使用,TCP,網(wǎng)絡服務,可用于從,TCP,網(wǎng)絡客戶端偵聽連接,可用于為,UDP,客戶端創(chuàng)建連接(它是,TCP,的備用協(xié)議,在本地網(wǎng)絡上使用),使用,TCP,類,TCP,(,Trans,fers,Control,Protocol,,傳輸控制協(xié)議)類包含連接兩個點并在這兩個點之間發(fā)送數(shù)據(jù)的方法,一個點由,IP,地址和端口號組成?,F(xiàn)有協(xié)議具有定義好的端口號,HTTP,使用端口號,80,;,SMPT,或電子郵件使用端口號,25,;,FTP,使用端口號,21,Internet Assigned Number Authority,(,IANA,,,Internet,編號分配管理機構)
9、負責為這些有名的服務分配端口號,TCP,提供有保證的傳送、錯誤更正和數(shù)據(jù)緩沖,TcpClient,類具有通過網(wǎng)絡連接、發(fā)送和接收流數(shù)據(jù)的簡單方法,TcpListener,類具有偵聽進入的,TCP,連接的方法,0,TcpClient,對象,屬性,說明,ReceiveBufferSize,獲取或設置接收緩沖區(qū)的大小,SendBufferSize,獲取或設置發(fā)送緩沖區(qū)的大小,方法,說明,Close,關閉所有,TCP,連接并釋放與,TcpClient,關聯(lián)的,資源,Connect,將使用主機名和端口號將客戶端連接至遠程,TCP,主機,GetStream,返回用于發(fā)送和接收數(shù)據(jù)的,NetworkStre
10、am,TCPListener,類的方法,方法,說明,AcceptSocket,返回與遠程客戶端通信的套接字,AcceptTcpClient,接受暫掛的連接請求,Start,開始偵聽進入的連接請求,Stop,關閉偵聽器,TcpListener,類具有偵聽進入的,TCP,連接的方法,其中,Start(),方法用于開始偵聽進入的連接請求,并且將把進入的連接放置在隊列中,直到調(diào)用,Stop(),為止。,AcceptSocket,(),或,AcceptTcpClient,(),方法可用于從進入的連接請求隊列中提取連接。,TCP,類應用程序實例,8-1,將以下兩個名稱空間添加至窗體,using,Syste
11、m.Net.Sockets,;,using,System.IO,;,在窗體的聲明區(qū)域中聲明下列變量,public,TcpListener,tcpListener,;,private,NetworkStream,networkStream,;,private,StreamReader,streamReader,;,private,StreamWriter,streamWriter,;,public Socket,socketForClient,;,TCP,類應用程序實例,8-2,private void,btnstart_Click(object,sender,System.EventArgs,
12、e),tcpListener,=new TcpListener(1234);,tcpListener.Start,();,MessageBox.Show,(,服務器已啟動,);,socketForClient,=,tcpListener.AcceptSocket,();,networkStream,=new,NetworkStream(socketForClient,);,streamWriter,=new,StreamWriter(networkStream,);,streamReader,=new,StreamReader(networkStream,);,try,if(,socketFo
13、rClient.Connected,),MessageBox.Show,(,客戶端已連接,);,string line=,streamReader.ReadLine,();,txtServerClient.Text,=line;,line=,line.ToUpper,()+!;,streamWriter.WriteLine(line,);,txtServerServer.Text,=line;,streamWriter.Flush,();,catch(Exception,ae,),Console.WriteLine(ae.ToString,();,在按鈕,btnstart,的,Click,事件
14、中添加下列代碼,TCP,類應用程序實例,8-3,private void,btnRecd_Click(object,sender,System.EventArgs,e),try ,if(,socketForClient.Connected,),string line=,streamReader.ReadLine,();,txtServerClient.Text,=line;,line=,line.ToUpper,()+!;,streamWriter.WriteLine(line,);,txtServerServer.Text,=line;,streamWriter.Flush,();,catc
15、h(Exception,ae,),Console.WriteLine(ae.ToString,();,在按鈕,btnRecd,的,Click,事件中添加下列代碼,以連續(xù)將數(shù)據(jù)傳輸?shù)娇蛻舳?TCP,類應用程序實例,8-4,private void Form1_Closing(object sender,System.ComponentModel.CancelEventArgs,e),DialogResult,answer=,MessageBox.Show,(“,這將關閉服務器。您是否確實要,關閉它?,提示框,MessageBoxButtons.YesNo,);,if(answer=,Dialog
16、Result.Yes,),Application.Exit,();,if(answer=,DialogResult.No,),e.Cancel,=true;,socketForClient.Close,();,在窗體,Form1,的,Closing,事件中添加下列代碼,以關閉所有連接,TCP,類應用程序實例,8-5,將以下兩個名稱空間添加至窗體,using,System.Net.Sockets,;,using,System.IO,;,聲明下列變量,TcpClient,myclient,;,private,NetworkStream,networkStream,;,private,StreamReader,streamReader,;,private,StreamWriter,streamWriter,;,TCP,類應用程序實例,8-6,在窗體的構造函數(shù)中添加代碼,以在特定端口建立與服務器的連接,public Form1(),InitializeComponent,();,try,myclient,=new,TcpClient(localhost,1234);,catch,Messag