C#異步網(wǎng)絡(luò)編程兩大方法淺析
C#異步網(wǎng)絡(luò)編程兩大方法是什么呢?讓我們來看看:
在進(jìn)行C#異步網(wǎng)絡(luò)編程過程中,有些函數(shù)會(huì)以阻塞的方式執(zhí)行,此時(shí)就不能做其他事,十分沒有效率。C#異步網(wǎng)絡(luò)編程兩大方法來解決這個(gè)問題。一種方法是采用Asynchronous Sockets, 一種方法是調(diào)用非阻塞的Socket Methods。
C#異步網(wǎng)絡(luò)編程兩大方法一、Asynchronous Sockets的方法
Socket類的很多連接,發(fā)送,接收函數(shù)都有相應(yīng)的異步版本,如:BeginAccept,BeginConnect,BeginReceive,BeginReceiveFrom,BeginSend,BeginSendTo,EndAccept,EndConnect,EndReceive,EndReceiveFrom,EndSend,EndSendTo。這些函數(shù)都是成對(duì)出現(xiàn)的,利用了Windows的事件機(jī)制。應(yīng)用這些函數(shù),能夠避免網(wǎng)絡(luò)編程通信過程中出現(xiàn)阻塞。在BeginXXX函數(shù)中,注冊(cè)一個(gè)回調(diào)函數(shù),當(dāng)相應(yīng)事件發(fā)生后,此回調(diào)函數(shù)得到調(diào)用,在此回調(diào)函數(shù)內(nèi)再調(diào)用相應(yīng)的EndXXX函數(shù),得到返回值。
C#異步網(wǎng)絡(luò)編程兩大方法二、調(diào)用非阻塞的Socket Methods方法
Asynchronous Sockets的方法是基于消息事件的操作系統(tǒng)特有的,利用了Windows的事件機(jī)制,在控制臺(tái)應(yīng)用程序中就不能夠應(yīng)用這種方法。另一種方法是在進(jìn)行網(wǎng)絡(luò)通信過程中,在真正通信之前先察看狀態(tài),如果不會(huì)阻塞,才進(jìn)行通信。Socket類中的Poll()函數(shù)和Select()函數(shù)能夠完成這種功能。Poll函數(shù)可以察看是否有可用數(shù)據(jù)可讀,可用連接可建立,是否可寫等,還可以設(shè)定超時(shí)時(shí)間。Poll函數(shù)只針對(duì)一個(gè)Socket,而Select函數(shù)可以針對(duì)一組Socket。
異步Sockets的背后實(shí)際上是采用了多線程的機(jī)制實(shí)現(xiàn)的。利用異步Sockets,可以不涉及多線程的情況下,完成多線程才能做的工作。
C#異步網(wǎng)絡(luò)編程兩大方法的基本內(nèi)容就向你介紹到這里,希望對(duì)你了解和學(xué)習(xí)C#異步網(wǎng)絡(luò)編程有所幫助。
【編輯推薦】