資源描述:
《c# socket 、TCPClient、TCPListener 用法詳解》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、c#socket、TCPClient、TCPListener用法詳解VisualC#.Net網(wǎng)絡(luò)程序開發(fā)-Socket篇Microsoft.NetFramework為應(yīng)用程序訪問Internet提供了分層的、可擴展的以及受管轄的網(wǎng)絡(luò)服務(wù),其名字空間System.Net和System.Net.Sockets包含豐富的類可以開發(fā)多種網(wǎng)絡(luò)應(yīng)用程序。.Net類采用的分層結(jié)構(gòu)允許應(yīng)用程序在不同的控制級別上訪問網(wǎng)絡(luò),開發(fā)人員可以根據(jù)需要選擇針對不同的級別編制程序,這些級別幾乎囊括了Internet的所有需要--從socket套接字到普通的請求/響應(yīng)
2、,更重要的是,這種分層是可以擴展的,能夠適應(yīng)Internet不斷擴展的需要。拋開ISO/OSI模型的7層構(gòu)架,單從TCP/IP模型上的邏輯層面上看,.Net類可以視為包含3個層次:請求/響應(yīng)層、應(yīng)用協(xié)議層、傳輸層。WebReqeust和WebResponse代表了請求/響應(yīng)層,支持Http、Tcp和Udp的類組成了應(yīng)用協(xié)議層,而Socket類處于傳輸層。傳輸層位于這個結(jié)構(gòu)的最底層,當其上面的應(yīng)用協(xié)議層和請求/響應(yīng)層不能滿足應(yīng)用程序的特殊需要時,就需要使用這一層進行Socket套接字編程。而在.Net中,System.Net.Socket
3、s命名空間為需要嚴密控制網(wǎng)絡(luò)訪問的開發(fā)人員提供了WindowsSockets(Winsock)接口的托管實現(xiàn)。System.Net命名空間中的所有其他網(wǎng)絡(luò)訪問類都建立在該套接字Socket實現(xiàn)之上,如TCPClient、TCPListener和UDPClient類封裝有關(guān)創(chuàng)建到Internet的TCP和UDP連接的詳細信息;NetworkStream類則提供用于網(wǎng)絡(luò)訪問的基礎(chǔ)數(shù)據(jù)流等,常見的許多Internet服務(wù)都可以見到Socket的蹤影,如Telnet、Http、Email、Echo等,這些服務(wù)盡管通訊協(xié)議Protocol的定義不
4、同,但是其基礎(chǔ)的傳輸都是采用的Socket。其實,Socket可以象流Stream一樣被視為一個數(shù)據(jù)通道,這個通道架設(shè)在應(yīng)用程序端(客戶端)和遠程服務(wù)器端之間,而后,數(shù)據(jù)的讀?。ń邮眨┖蛯懭耄òl(fā)送)均針對這個通道來進行??梢姡趹?yīng)用程序端或者服務(wù)器端創(chuàng)建了Socket對象之后,就可以使用Send/SentTo方法將數(shù)據(jù)發(fā)送到連接的Socket,或者使用Receive/ReceiveFrom方法接收來自連接Socket的數(shù)據(jù);針對Socket編程,.NET框架的Socket類是Winsock32API提供的套接字服務(wù)的托管代碼版本。其中為
5、實現(xiàn)網(wǎng)絡(luò)編程提供了大量的方法,大多數(shù)情況下,Socket類方法只是將數(shù)據(jù)封送到它們的本機Win32副本中并處理任何必要的安全檢查。如果你熟悉WinsockAPI函數(shù),那么用Socket類編寫網(wǎng)絡(luò)程序會非常容易,當然,如果你不曾接觸過,也不會太困難,跟隨下面的解說,你會發(fā)覺使用Socket類開發(fā)windows網(wǎng)絡(luò)應(yīng)用程序原來有規(guī)可尋,它們在大多數(shù)情況下遵循大致相同的步驟。在使用之前,你需要首先創(chuàng)建Socket對象的實例,這可以通過Socket類的構(gòu)造方法來實現(xiàn):publicSocket(AddressFamilyaddressFamily
6、,SocketTypesocketType,ProtocolTypeprotocolType);其中,addressFamily參數(shù)指定Socket使用的尋址方案,socketType參數(shù)指定Socket的類型,protocolType參數(shù)指定Socket使用的協(xié)議。下面的示例語句創(chuàng)建一個Socket,它可用于在基于TCP/IP的網(wǎng)絡(luò)(如Internet)上通訊。Sockets=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);若要使用UDP
7、而不是TCP,需要更改協(xié)議類型,如下面的示例所示:Sockets=newSocket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);一旦創(chuàng)建Socket,在客戶端,你將可以通過Connect方法連接到指定的服務(wù)器,并通過Send/SendTo方法向遠程服務(wù)器發(fā)送數(shù)據(jù),而后可以通過Receive/ReceiveFrom從服務(wù)端接收數(shù)據(jù);而在服務(wù)器端,你需要使用Bind方法綁定所指定的接口使Socket與一個本地終結(jié)點相聯(lián),并通過Listen方法偵聽該接口上的請求
8、,當偵聽到用戶端的連接時,調(diào)用Accept完成連接的操作,創(chuàng)建新的Socket以處理傳入的連接請求。使用完Socket后,記住使用Shutdown方法禁用Socket,并使用Close方法關(guān)閉Socket。