C#網(wǎng)絡(luò)編程之IpEndPoint類_第1頁(yè)
C#網(wǎng)絡(luò)編程之IpEndPoint類_第2頁(yè)
C#網(wǎng)絡(luò)編程之IpEndPoint類_第3頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡(jiǎn)介

1、C#網(wǎng)絡(luò)編程之網(wǎng)絡(luò)編程之 IpEndPoint 類類 在 Internet中,TCP/IP 使用一個(gè)網(wǎng)絡(luò)地址和一個(gè)服務(wù)端口號(hào)來(lái)唯一標(biāo)識(shí)設(shè)備。網(wǎng)絡(luò)地址標(biāo)識(shí)網(wǎng)絡(luò)上的特定設(shè)備;端口號(hào)標(biāo)識(shí)要連接到的該設(shè)備上的特定服務(wù)。網(wǎng)絡(luò)地址和服務(wù)端口的組合稱為終結(jié)點(diǎn),在.NET框架中正是由 EndPoint類表示這個(gè)終結(jié)點(diǎn),它提供表示網(wǎng)絡(luò)資源或服務(wù)的抽象,用以標(biāo)志網(wǎng)絡(luò)地址等信息。.Net同時(shí)也為每個(gè)受支持的地址族定義了 EndPoint的子代;對(duì)于 IP 地址族,該類為 IPEndPoint。IPEndPoint類包含應(yīng)用程序連接到主機(jī)上的服務(wù)所需的主機(jī)和端口信息,通過(guò)組合服務(wù)的主機(jī) IP 地址和端口號(hào),IPEnd

2、Point類形成到服務(wù)的連接點(diǎn)。 在 IPEndPoint類中有兩個(gè)很有用的構(gòu)造函數(shù): public IPEndPoint(long, int); public IPEndPoint(IPAddress, int); 它們的作用就是用指定的地址和端口號(hào)初始化 IPEndPoint 類的新實(shí)例。該類中的屬性有:Address 屬性、AddressFamily 屬性以及 Port屬性,這些屬性相對(duì)比較容易理解,這里就不作多介紹。下面的代碼顯示了如何取得服務(wù)器 的終結(jié)點(diǎn): IPHostEntry IPHost = Dns.Resolve(); IPAddress addr = IPHost.Addr

3、essList; IPEndPoint ep = new IPEndPoint(addr0,80); 這樣,我們已經(jīng)了解了和主機(jī)取得連接的一些必要的基本類,有了這些知識(shí),我們就可以運(yùn)用下面的 Socket類真正地和主機(jī)取得連接并進(jìn)行通訊了。 Socket 類:類: Socket類是包含在 System.Net.Sockets名字空間中的一個(gè)非常重要的類。一個(gè) Socket 實(shí)例包含了一個(gè)本地以及一個(gè)遠(yuǎn)程的終結(jié)點(diǎn),就像上面介紹的那樣,該終結(jié)點(diǎn)包含了該 Socket實(shí)例的一些相關(guān)信息。 需要知道的是 Socket 類支持兩種基本模式:同步和異步。其區(qū)別在于:在同步模式中,對(duì)執(zhí)行網(wǎng)絡(luò)操作的函數(shù)(如

4、Send 和 Receive)的調(diào)用一直等到操作完成后才將控制返回給調(diào)用程序。在異步模式中,這些調(diào)用立即返回。 下面我們重點(diǎn)討論同步模式的 Socket編程。首先,同步模式的 Socket編程的基本過(guò)程如下: 1 創(chuàng)建一個(gè) Socket實(shí)例對(duì)象。 2 將上述實(shí)例對(duì)象連接到一個(gè)具體的終結(jié)點(diǎn)(EndPoint)。 3 連接完畢,就可以和服務(wù)器進(jìn)行通訊:接收并發(fā)送信息。 4 通訊完畢,用 ShutDown()方法來(lái)禁用 Socket。 5 最后用 Close()方法來(lái)關(guān)閉 Socket。 知道了以上基本過(guò)程,我們就開始進(jìn)一步實(shí)現(xiàn)連接并通訊了。在使用之前,你需要首先創(chuàng)建Socket對(duì)象的實(shí)例,這可以通

5、過(guò) Socket類的構(gòu)造方法來(lái)實(shí)現(xiàn): public Socket(AddressFamily addressFamily,SocketType socketType,ProtocolType protocolType); 其中,addressFamily 參數(shù)指定 Socket 使用的尋址方案,比如 AddressFamily.InterNetwork表明為 IP 版本 4的地址;socketType參數(shù)指定 Socket的類型,比如 SocketType.Stream表明連接是基于流套接字的,而 SocketType.Dgram表示連接是基于數(shù)據(jù)報(bào)套接字的。protocolType參數(shù)指定

6、Socket使用的協(xié)議,比如 ProtocolType.Tcp表明連接協(xié)議是運(yùn)用 TCP 協(xié)議的,而Protocol.Udp 則表明連接協(xié)議是運(yùn)用 UDP 協(xié)議的。 在創(chuàng)建了 Socket實(shí)例后,我們就可以通過(guò)一個(gè)遠(yuǎn)程主機(jī)的終結(jié)點(diǎn)和它取得連接,運(yùn)用的方法就是 Connect()方法: public Connect (EndPoint ep); 該方法只可以被運(yùn)用在客戶端。進(jìn)行連接后,我們可以運(yùn)用套接字的 Connected 屬性來(lái)驗(yàn)證連接是否成功。如果返回的值為 true,則表示連接成功,否則就是失敗。下面的代碼就顯示了如何創(chuàng)建 Socket實(shí)例并通過(guò)終結(jié)點(diǎn)與之取得連接的過(guò)程: IPHostE

7、ntry IPHost = Dns.Resolve(http:/ string aliases = IPHost.Aliases; IPAddress addr = IPHost.AddressList; EndPoint ep = new IPEndPoint(addr0,80); Socket sock = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); sock.Connect(ep); if(sock.Connected) Console.WriteLine(OK); 一旦連接成功,我

8、們就可以運(yùn)用 Send()和 Receive()方法來(lái)進(jìn)行通訊。 Send()方法的函數(shù)原型如下: public int Send (byte buffer, int size, SocketFlags flags); 其中,參數(shù) buffer 包含了要發(fā)送的數(shù)據(jù),參數(shù) size表示要發(fā)送數(shù)據(jù)的大小,而參數(shù) flags 則可以是以下一些值:SocketFlags.None、SocketFlags.DontRoute、SocketFlags.OutOfBnd。 該方法返回的是一個(gè) System.Int32 類型的值,它表明了已發(fā)送數(shù)據(jù)的大小。同時(shí),該方法還有以下幾種已被重載了的函數(shù)實(shí)現(xiàn): pub

9、lic int Send (byte buffer); public int Send (byte buffer, SocketFlags flags); public int Send (byte buffer,int offset, int size, SocketFlags flags); 介紹完 Send()方法,下面是 Receive()方法,其函數(shù)原型如下: public int Receive(byte buffer, int size, SocketFlags flags); 其中的參數(shù)和 Send()方法的參數(shù)類似,在這里就不再贅述。 同樣,該方法還有以下一些已被重載了的函數(shù)

10、實(shí)現(xiàn): public int Receive (byte buffer); public int Receive (byte buffer, SocketFlags flags); public int Receive (byte buffer,int offset, int size, SocketFlags flags); 在通訊完成后,我們就通過(guò) ShutDown()方法來(lái)禁用 Socket,函數(shù)原型如下: public void ShutDown(SocketShutdown how); 其中的參數(shù) how表明了禁用的類型,SoketShutdown.Send表明關(guān)閉用于發(fā)送的套接字;

11、SoketShutdown.Receive表明關(guān)閉用于接收的套接字;而 SoketShutdown.Both 則表明發(fā)送和接收的套接字同時(shí)被關(guān)閉。 應(yīng)該注意的是在調(diào)用 Close()方法以前必須調(diào)用 ShutDown()方法以確保在 Socket關(guān)閉之前已發(fā)送或接收所有掛起的數(shù)據(jù)。一旦 ShutDown()調(diào)用完畢,就調(diào)用 Close()方法來(lái)關(guān)閉Socket,其函數(shù)原型如下: public void Close(); 該方法強(qiáng)制關(guān)閉一個(gè) Socket連接并釋放所有托管資源和非托管資源。該方法在內(nèi)部其實(shí)是調(diào)用了方法 Dispose(),該函數(shù)是受保護(hù)類型的,其函數(shù)原型如下: protected virtual void Dispose(bool disposing); 其中,參數(shù) disposing為 true或是 false,如果為 true,則同時(shí)釋放

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論