91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 64KB
    文件類型: .zip
    金幣: 2
    下載: 0 次
    發布日期: 2021-05-07
  • 語言: C/C++
  • 標簽: C#??IOCP??TCP??完成端口??

資源簡介

最近有項目要做一個高性能網絡服務器,去網絡上搜到到的都是C++版本而且是英文或者簡單的DEMO,所以自己動手寫了C# 的DEMO。 網絡上只寫接收到的數據,沒有說怎么處理緩沖區數據,本DEMO簡單的介紹如何處理接收到的數據。簡單易用,希望對大家有用. 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對象,或者在初始化中建立幾個來專門用于主動發送信息,因為這種需求一般是進行信息群發,建立一個對象可以用于很多次信息發送,總體來看,這種花銷不大,還減去了字符拷貝和消耗。 6、測試結果:(在我的筆記本上時行的,我的本本是T420 I7 8G內存) 100客戶 100,000(十萬次)不間斷的發送接收數據(發送和接收之間沒有Sleep,就一個一循環,不斷的發送與接收) 耗時3004.6325 秒完成 總共 10,000,000 一千萬次訪問 平均每分完成 199,691.6 次發送與接收 平均每秒完成 3,328.2 次發送與接收 整個運行過程中,內存消耗在開始兩三分種后就保持穩定不再增漲。 看了一下對每個客戶端的延遲最多不超過2秒。

資源截圖

代碼片段和文件信息

using?System;
using?System.Collections.Generic;
using?System.ComponentModel;
using?System.Data;
using?System.Drawing;
using?System.Text;
using?System.Windows.Forms;

namespace?IocpServer
{
????public?partial?class?MainForm?:?Form
????{
????????public?delegate?void?SetListBoxCallBack(string?str);
????????public?SetListBoxCallBack?setlistboxcallback;
????????public?void?SetListBox(string?str)
????????{
????????????infoList.Items.Insert(0?str);
????????????infoList.SelectedIndex?=?0;
????????}

????????private?IoServer?iocp?=?new?IoServer(2?1024);

????????public?MainForm()
????????{
????????????InitializeComponent();
????????????setlistboxcallback?=?new?SetListBoxCallBack(SetListBox);
????????}

????????private?void?startBtn_Click(object?sender?EventArgs?e)
????????{
????????????iocp.Start(1086);
????????????iocp.mainForm?=?this;
????????????startBtn.Enabled?=?false;
????????????stopBtn.Enabled?=?true;
????????????SetListBox(“監聽開啟...“);
????????}

????????private?void?stopBtn_Click(object?sender?EventArgs?e)
????????{
????????????iocp.Stop();
????????????startBtn.Enabled?=?true;
????????????stopBtn.Enabled?=?false;
????????????SetListBox(“監聽停止...“);
????????}

????????private?void?exitBtn_Click(object?sender?EventArgs?e)
????????{
????????????if?(stopBtn.Enabled)
????????????????iocp.Stop();
????????????this.Close();
????????}

????????private?void?clearBtn_Click(object?sender?EventArgs?e)
????????{
????????????infoList.Items.Clear();
????????}

????}
}

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2013-07-02?19:13??IocpServer\
?????目錄???????????0??2013-07-02?19:13??IocpServer\IocpServer\
?????文件?????????872??2012-11-22?09:26??IocpServer\IocpServer.sln
?????文件???????27136??2013-07-03?14:34??IocpServer\IocpServer.suo
?????目錄???????????0??2013-07-02?19:13??IocpServer\IocpServer\bin\
?????目錄???????????0??2013-07-03?14:34??IocpServer\IocpServer\bin\Debug\
?????文件???????16384??2013-07-03?14:34??IocpServer\IocpServer\bin\Debug\IocpServer.exe
?????文件???????34304??2013-07-03?14:34??IocpServer\IocpServer\bin\Debug\IocpServer.pdb
?????文件???????11600??2013-07-03?14:25??IocpServer\IocpServer\bin\Debug\IocpServer.vshost.exe
?????文件?????????490??2010-03-17?22:39??IocpServer\IocpServer\bin\Debug\IocpServer.vshost.exe.manifest
?????文件????????1560??2013-07-02?15:33??IocpServer\IocpServer\Form1.cs
?????文件????????6992??2013-07-02?13:15??IocpServer\IocpServer\Form1.Designer.cs
?????文件????????5817??2013-07-02?13:15??IocpServer\IocpServer\Form1.resx
?????文件????????3477??2012-11-23?00:10??IocpServer\IocpServer\IoContextPool.cs
?????文件????????3717??2012-11-22?19:20??IocpServer\IocpServer\IocpServer.csproj
?????文件???????14576??2013-07-03?14:34??IocpServer\IocpServer\IoServer.cs
?????目錄???????????0??2013-07-02?19:13??IocpServer\IocpServer\obj\
?????目錄???????????0??2013-07-02?19:13??IocpServer\IocpServer\obj\x86\
?????目錄???????????0??2013-07-03?14:34??IocpServer\IocpServer\obj\x86\Debug\
?????文件????????4501??2013-07-02?17:45??IocpServer\IocpServer\obj\x86\Debug\DesignTimeResolveAssemblyReferences.cache
?????文件????????6291??2013-07-03?14:34??IocpServer\IocpServer\obj\x86\Debug\DesignTimeResolveAssemblyReferencesInput.cache
?????文件?????????674??2013-07-03?14:34??IocpServer\IocpServer\obj\x86\Debug\GenerateResource.read.1.tlog
?????文件????????1582??2013-07-03?14:34??IocpServer\IocpServer\obj\x86\Debug\GenerateResource.write.1.tlog
?????文件????????2021??2013-07-03?14:34??IocpServer\IocpServer\obj\x86\Debug\IocpServer.csproj.FileListAbsolute.txt
?????文件???????16384??2013-07-03?14:34??IocpServer\IocpServer\obj\x86\Debug\IocpServer.exe
?????文件?????????180??2013-07-03?14:34??IocpServer\IocpServer\obj\x86\Debug\IocpServer.MainForm.resources
?????文件???????34304??2013-07-03?14:34??IocpServer\IocpServer\obj\x86\Debug\IocpServer.pdb
?????文件?????????180??2013-07-03?14:34??IocpServer\IocpServer\obj\x86\Debug\IocpServer.Properties.Resources.resources
?????目錄???????????0??2013-07-02?13:13??IocpServer\IocpServer\obj\x86\Debug\TempPE\
?????文件?????????485??2012-11-22?22:50??IocpServer\IocpServer\Program.cs
?????目錄???????????0??2013-07-02?19:13??IocpServer\IocpServer\Properties\
............此處省略5個文件信息

評論

共有 條評論