下面,用乙個例子來解釋同步通訊和非同步通訊的根本區別。
假定乙個伺服器應用程式在指定埠監聽客戶端傳送來的資料。在同步通訊接收中,當伺服器等待從客戶端接收資料時,如果流沒有資料,那麼,主線程會阻塞,直到資料請求得到。因此,在這段時間,伺服器端不能進行任何工作,直到接收到該客戶端的資料。如果此時,另乙個客戶端需要連線伺服器,由於伺服器阻塞在第乙個客戶端上,所以,不能接收新的請求。對於需要同時支援多台客戶端的現實應用中,這個方法顯然是不可取的。
在非同步通訊中,當伺服器端監聽或接收客戶端資料時,仍然可以處理其他客戶機的請求或接收資料。當伺服器非同步接收時,socket事件觸發,則乙個單獨的執行緒監聽socket,並且會引發乙個**(callback)函式(在非同步監聽剛剛開始的時候引發)。這個**函式會依次的響應,並處理socket事件。例如,遠端程式在socket中寫入了一些資料,乙個「讀取資料事件」(自定義的**函式)會觸發,該事件知曉如何從socket中讀取資料。
雖然非同步通訊可以通過使用多執行緒來實現,但c#和.net frameworks提供了一系列的方法來實現非同步通訊,而不需要使用複雜的執行緒的知識。
socket類(system.net.sockets.socket)提供了一系列同步和非同步通訊的方法。在.net命名協議中,所有的非同步方法名都是以「begin」或「end」作為同步方法名的字首。以「begin」或「end」為字首的方法名,表示與同步通訊方法名相對應的一對非同步通訊方法。如下所示。
同步通訊方法
非同步通訊方法
connect()
beginconnect(), ednconnect()
receive()
beginreceive(), endreceive()
Socket非同步程式設計
以 socket 通訊中的非同步方法為例 public static manualresetevent connectdone new manualresetevent false public static void connectcallback iasyncresult ar sclient....
非同步Socket程式設計II
下面的應用程式中有兩個類,乙個實現socket伺服器端,另乙個實現socket客戶端。socket伺服器端應用程式 socket伺服器應用程式在socketserver類中實現 檔名為socketserver.cs 這個類包含乙個主要的socket物件 m mainsocket 和一組工作socke...
重疊i 0非同步socket模型
因為相信,每個qq頭像亮著的背後,電腦前都坐著乙個孤獨的人。你的個性簽名不再更新,qq頭像不再亮,所以我相信你在生活中是開心的。天橋還是那座天橋,車樑還是會從下面經過,路燈還是兩排。只是我們都回不去那樣的場景了。錯過好幾次約會,上班遲到扣了好幾次工資,為得到一點成就感,現在放出來。include s...