日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# IOCP完成端口模型(简单实用高效)

發布時間:2025/3/17 C# 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# IOCP完成端口模型(简单实用高效) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

1、在C#中,不用去面對完成端口的操作系統內核對象,Microsoft已經為我們提供了SocketAsyncEventArgs類,它封裝了IOCP的使用。請參考:http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socketasynceventargs.aspx?cs-save-lang=1&cs-lang=cpp#code-snippet-1。2、我的SocketAsyncEventArgsPool類使用List對象來存儲對客戶端來通信的SocketAsyncEventArgs對象,它相當于直接使用內核對象時的IoContext。我這樣設計比用堆棧來實現的好處理是,我可以在SocketAsyncEventArgsPool池中找到任何一個與服務器連接的客戶,主動向它發信息。而用堆棧來實現的話,要主動給客戶發信息,則還要設計一個結構來存儲已連接上服務器的客戶。3、對每一個客戶端不管還發送還是接收,我使用同一個SocketAsyncEventArgs對象,對每一個客戶端來說,通信是同步進行的,也就是說服務器高度保證同一個客戶連接上要么在投遞發送請求,并等待;或者是在投遞接收請求,等待中。本例只做echo服務器,還未考慮由服務器主動向客戶發送信息。4、SocketAsyncEventArgs的UserToken被直接設定為被接受的客戶端Socket。5、沒有使用BufferManager 類,因為我在初始化時給每一個SocketAsyncEventArgsPool中的對象分配一個緩沖區,發送時使用Arrary.Copy來進行字符拷貝,不去改變緩沖區的位置,只改變使用的長度,因此在下次投遞接收請求時恢復緩沖區長度就可以了!如果要主動給客戶發信息的話,可以new一個SocketAsyncEventArgs對象,或者在初始化中建立幾個來專門用于主動發送信息,因為這種需求一般是進行信息群發,建立一個對象可以用于很多次信息發送,總體來看,這種花銷不大,還減去了字符拷貝和消耗。
demo下載地址:http://files.cnblogs.com/files/airtcp/IocpServer.zip

?

轉載于:https://www.cnblogs.com/airtcp/p/5230342.html

總結

以上是生活随笔為你收集整理的C# IOCP完成端口模型(简单实用高效)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。