freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c網(wǎng)絡(luò)編程第五章c網(wǎng)絡(luò)編程方法概述-資料下載頁

2025-05-14 21:06本頁面
  

【正文】 ReadLine( )方法讀取網(wǎng)絡(luò)緩沖區(qū)的數(shù)據(jù),如果調(diào)用的時候沒有數(shù)據(jù)到達(dá),那么此 ReadLine( )方法將一直掛在調(diào)用上,直到讀到一些數(shù)據(jù),此函數(shù)才返回。 第5章 C網(wǎng)絡(luò)編程方法概述 43 套接字編程 套接字編程原理 ( 4)非阻塞方式 非阻塞和阻塞的概念相對應(yīng),非阻塞套接字是指在執(zhí)行此套接字的網(wǎng)絡(luò)調(diào)用時,即使不能立刻得到結(jié)果,該函數(shù)也不會阻塞當(dāng)前線程,而會立刻返回。對于非阻塞套接字,同樣調(diào)用 StreamReader類的 ReadLine( )方法讀取網(wǎng)絡(luò)緩沖區(qū)的數(shù)據(jù),不管是否讀到數(shù)據(jù)都立即返回,而不會一直掛在此函數(shù)調(diào)用上。 對象是否處于阻塞模式和函數(shù)是不是阻塞調(diào)用有很強(qiáng)的相關(guān)性,但是并不是一一對應(yīng)的。阻塞對象上可以有非阻塞的調(diào)用方式,可以通過一定的 API去輪詢狀態(tài),在適當(dāng)?shù)臅r候調(diào)用阻塞函數(shù),就可以避免阻塞。而對于非阻塞對象,調(diào)用特殊的函數(shù)也可以進(jìn)入阻塞調(diào)用。函數(shù) select就是這樣的一個例子。 在 Windows網(wǎng)絡(luò)通信軟件開發(fā)中,最常用的方法就是異步非阻塞套接字??蛻舳?/服務(wù)器結(jié)構(gòu)的軟件采用的方式就是異步非阻塞模式。在利用 C進(jìn)行網(wǎng)絡(luò)編程時,由于 .NET Framework SDK對阻塞和非阻塞的工作機(jī)制進(jìn)行了封裝,因此不需要深入了解同步、異步、阻塞、非阻塞的原理。 3.套接字工作原理 套接字可以像 Stream流一樣被視為一個數(shù)據(jù)通道,這個通道架設(shè)在客戶端應(yīng)用程序和服務(wù)器端程序之間,數(shù)據(jù)的讀?。ń邮眨┖蛯懭耄òl(fā)送)均針對這個通道來進(jìn)行。因此要通過網(wǎng)絡(luò)進(jìn)行通信,就至少需要一對套接字,其中一個運(yùn)行于客戶端,稱之為客戶端套接字( ClientSocket),另一個運(yùn)行于服務(wù)器端,稱之為服務(wù)器端套接字( ServerSocket)。當(dāng)創(chuàng)建了這兩個套接字對象之后,將這兩個套接字連接起來就可以實(shí)現(xiàn)數(shù)據(jù)傳送了。 第5章 C網(wǎng)絡(luò)編程方法概述 44 套接字編程 套接字編程原理 根據(jù)連接啟動的方式以及本地套接字要連接的目標(biāo),套接字之間的連接過程可以分為三個步驟:服務(wù)器監(jiān)聽,客戶端請求,連接確認(rèn)。 ( 1)服務(wù)器監(jiān)聽 服務(wù)器監(jiān)聽時服務(wù)器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實(shí)時監(jiān)控網(wǎng)絡(luò)狀態(tài)。 ( 2)客戶端請求 客戶端請求是指由客戶端的套接字發(fā)出連接請求,要連接的目標(biāo)是服務(wù)器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字,指出服務(wù)器端套接字的地址和端口號,然后再向服務(wù)器端套接字提出連接請求。 ( 3)連接確認(rèn) 連接確認(rèn)是指當(dāng)服務(wù)器端套接字監(jiān)聽到(或接收到)客戶端套接字的連接請求時,它就響應(yīng)客戶端套接字的請求,建立一個新的線程,把服務(wù)器端套接字的描述發(fā)給客戶端,一旦客戶端確認(rèn)了此描述,連接就建立好了。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端套接字的連接請求。 在 TCP/IP網(wǎng)絡(luò)中, IP網(wǎng)絡(luò)交互分為兩大類:面向連接的交互和無連接的交互。下面給出這兩種交互的套接字編程流程。分別如圖 。 第5章 C網(wǎng)絡(luò)編程方法概述 45 套接字編程 套接字編程原理 圖 面向連接的套接字編程流程 第5章 C網(wǎng)絡(luò)編程方法概述 46 套接字編程 套接字編程原理 圖 面向無連接的套接字編程流程 第5章 C網(wǎng)絡(luò)編程方法概述 47 套接字編程 .NET中的 Socket類 針對 Socket編程, .NET框架的 絡(luò)訪問的開發(fā)人員提供了 WinSock接口的托管實(shí)現(xiàn)。其中 Socket類是 WinSock32 API提供的套接字服務(wù)的托管代碼版本,為實(shí)現(xiàn)網(wǎng)絡(luò)編程提供了大量的方法。在大多數(shù)情況下, Socket類方法只是將數(shù)據(jù)封送到它們的本機(jī) Win32副本中并處理任何必要的安全檢查。 Socket類用于實(shí)現(xiàn) Berkeley套接字接口。 1. Socket類的構(gòu)造函數(shù) Socket類的構(gòu)造函數(shù)原型如下: public Socket( AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType )。 構(gòu)造函數(shù)使用 3個參數(shù)來定義創(chuàng)建的 Socket實(shí)例。 AddressFamily用來指定網(wǎng)絡(luò)類型; SocketType用來指定套接字類型(即數(shù)據(jù)連接方式); ProtocolType用來指定網(wǎng)絡(luò)協(xié)議。 3個參數(shù)均是在命名空間 。但它們并不能任意組合,不當(dāng)?shù)慕M合反而會導(dǎo)致無效套接字。如對于常規(guī)的 IP通信網(wǎng)絡(luò), AddressFamily只能使用 ,此時可用的SocketType、 ProtocolType組合如表 。 第5章 C網(wǎng)絡(luò)編程方法概述 48 套接字編程 .NET中的 Socket類 表 IP套接字定義組合 SocketType值 ProtocolType值 描 述 Stream Tcp 面向連接套接字 Dgram Udp 無連接套接字 Raw Icmp 網(wǎng)際消息控制協(xié)議套接字 Raw Raw 基礎(chǔ)傳輸協(xié)議套接字 表 Socket類的公共屬性 屬 性 名 描 述 AddressFamily 獲取 Socket的地址族 Available 獲取已經(jīng)從網(wǎng)絡(luò)接收且可供讀取的數(shù)據(jù)量 Blocking 獲取或設(shè)置一個值,該值指示 Socket是否處于阻塞模式 Connected 獲取一個值,該值指示 Socket是否已連接到遠(yuǎn)程主機(jī) Handle 獲取 Socket的操作系統(tǒng)句柄 LocalEndPoint 獲取本地終結(jié)點(diǎn) EndPoint RemoteEndPoint 獲取遠(yuǎn)程終結(jié)點(diǎn) EndPoint ProtocolType 獲取 Socket的協(xié)議類型 SocketType 獲取 Socket的類型 第5章 C網(wǎng)絡(luò)編程方法概述 49 套接字編程 .NET中的 Socket類 2. Socket類的常用方法 ( 1) Bind(EndPoint address) 在服務(wù)器端,當(dāng)一個套接字被創(chuàng)建后,需要將它綁定到系統(tǒng)的一個特定地址??梢允褂?Bind( )方法來完成,其參數(shù)為一個 IPEndPoint實(shí)例(包含 IP地址和端口信息)。 ( 2) Listen(int con_num) 服務(wù)器端的套接字完成了與地址的綁定后,就使用 Listen( )方法監(jiān)聽客戶發(fā)送的連接請求。其參數(shù) con_num為一整型值,該值表示服務(wù)器可以接受的最大連接數(shù)目。超過這個數(shù)目的連接都會被拒絕。 con_num數(shù)值的設(shè)定會影響到服務(wù)器的運(yùn)行,因?yàn)槊總€接受的連接都要使用 TCP緩沖區(qū),如果連接的數(shù)目過大,收發(fā)數(shù)據(jù)的緩存將減少。 ( 3) Accept( ) 在服務(wù)器進(jìn)入監(jiān)聽狀態(tài)時,如有從客戶端發(fā)來的連接請求,服務(wù)器將使用Accept( )方法來接受連接請求。 Accept( )返回一個新的套接字,該套接字包含所建立的連接的信息并負(fù)責(zé)處理本連接的所有通信。而服務(wù)器剛開始創(chuàng)建的套接字仍然負(fù)責(zé)監(jiān)聽,并在需要時調(diào)用 Accept( )接受新的連接請求。 ( 4) Send( ) 當(dāng)服務(wù)器接受了來自客戶端的連接請求后,服務(wù)器和客戶端雙方就可以利用Send( )方法來發(fā)送數(shù)據(jù)。 Send( )有四種重載方法,如表 。 第5章 C網(wǎng)絡(luò)編程方法概述 50 套接字編程 .NET中的 Socket類 表 Send( )、 Receive( )重載方法 方 法 說 明 Send(byte[]data) 將數(shù)據(jù)發(fā)送到連接的 Socket Send(byte[]data,SocketFlang sf) 使用指定的 SocketFlags將數(shù)據(jù)發(fā)送到連接的 Socket Send(byte[]data,int size,SocketFlags sf) 使用指定的 SocketFlags,將指定字節(jié)數(shù)的數(shù)據(jù)發(fā)送到已連接的 Socket Send(byte[]data,int offset,int size,SocketFlags sf) 使用指定的 SocketFlags,將指定字節(jié)數(shù)的數(shù)據(jù)發(fā)送到已連接的 Socket(從指定的偏移量開始) Receive(byte[] data) 從綁定的套接字接收數(shù)據(jù),將數(shù)據(jù)存入接收緩沖區(qū) Receive(byte[] data, SocketFlags sf) 使用指定的 SocketFlags,從綁定的套接字接收數(shù)據(jù),將數(shù)據(jù)存入接收緩沖區(qū) Receive(byte[]data,int size,SocketFlags sf) 使用指定的 SocketFlags,從綁定的套接字接收指定字節(jié)數(shù)的數(shù)據(jù),并將數(shù)據(jù)存入接收緩沖區(qū) Receive(byte[]data,int offset,int size,SocketFlags sf) 使用指定的 SocketFlags,從綁定的套接字接收指定字節(jié)數(shù)的數(shù)據(jù),并將數(shù)據(jù)存入接收緩沖區(qū)的指定偏移量位置 第5章 C網(wǎng)絡(luò)編程方法概述 51 套接字編程 .NET中的 Socket類 ( 5) Receive( ) 當(dāng)服務(wù)器接受了來自客戶端的連接請求后,服務(wù)器和客戶端雙方就可以利用Receive( )方法來接受數(shù)據(jù)。 Receive( )有四種重載方法如表 。 ( 6) Connect(EndPoint remoteEP) 同服務(wù)器端一樣,客戶端的套接字建立后也必須與一個地址綁定。在客戶端使用 Connect( )方法實(shí)現(xiàn)綁定, remoteEP參數(shù)為所要連接的服務(wù)器端的 IPEndPoint實(shí)例。調(diào)用 Connect( )方法后,它將一直阻塞到連接建立,如果連接不成功,將返回一個異常。 ( 7) Shutdown(SocketShutdown how) 當(dāng)客戶端和服務(wù)器端的通信結(jié)束時,必須關(guān)閉相應(yīng)的套接字實(shí)例??梢允褂肧hutdown( )方法來禁止該套接字上的發(fā)送和接收, Shutdown( )方法有一個枚舉類型的參數(shù),如 , 和接收的套接字。圖 獲取套接字屬性運(yùn)行結(jié)果 ( 8) Close( ) 禁止套接字上的發(fā)送和接收之后,使用 Close( )方法關(guān)閉套接字連接并釋放所有相關(guān)資源。這樣套接字會在系統(tǒng)內(nèi)部緩沖區(qū)處理完畢后關(guān)閉套接字并釋放資源。 下面用一個簡單的實(shí)例來說明創(chuàng)建套接字以及獲取該套接字屬性的使用方法,程序?qū)崿F(xiàn)如代碼實(shí)例 。程序運(yùn)行結(jié)果如圖 。 第5章 C網(wǎng)絡(luò)編程方法概述 52 套接字編程 .NET中的 Socket類 using System。 using 。 using 。 using 。 using 。 namespace TestSocket { class Program { static void Main(string[] args) { //創(chuàng)建 IPEndPoint實(shí)例 IPAddress ipa = ()。 IPEndPoint ipep = new IPEndPoint(ipa,8080)。 //創(chuàng)建 Socket實(shí)例 Socket test_socket = new Socket(, , )。 (AddressFamily: {0},)。 (SocketType: {0},)。 (ProtocolType: {0},)。 (Blocking: {0},)。 //修改 Socket實(shí)例的屬性 = false。 (new Blocking: {0},)。 (Connected: {0},)。 //調(diào)用 Bind( )方法,使 Socket與一個本地終結(jié)點(diǎn)相關(guān)聯(lián) (ipep)。 IPEndPoint sock_iep = (IPEndPoint)。 (Local EndPo
點(diǎn)擊復(fù)制文檔內(nèi)容
高考資料相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1