在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美

當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

完成基于事件通知的.Net套接字

完成基于事件通知的.Net套接字

更新時間:2022-05-04 文章作者:未知 信息來源:網絡 閱讀次數:

以前學過MFC,我用過的它里面的包裝Winsock的兩個類CSocket和CAsyncSocket,我一直覺得它哪個事件通知的功能比較不錯,特別是在連接的兩方收發數據沒有一定的規律的時候比較有用,雖然不用它的事件通知也可以實現功能,但是你需要循環檢測套接字的狀態或者阻塞等待,如果每次都要做這些瑣碎的工作豈不是很麻煩,于是我就想對這些功能作一次封裝。當然在.net里面采用delegate和event是最好的選擇了。下面就是我實現的一些細節:

先講一下思路:其實這個還是很簡單了,估計高手們會不屑一顧了^_^。當套接字開始工作,比如開始監聽、開始連接的時候,啟動一個線程不停的檢測套接字的狀態,當某一事件的狀態條件滿足時就觸發此事件,要知道具體檢測套接字狀態的方法,請往下看。

平常用套接字編成的時候可能需要用到的功能就是:連接成功或者失敗的通知、在監聽的套接字上有掛起的連接的通知、有數據可以接受的通知、套接字關閉的通知、還有套接字空閑可以發送數據的通知等,我也就使對上面幾個功能作了封裝,不過我覺得最后面一個功能用處不大???

我的Socket類是從System.Net.Sockets.Socket繼承下來的,類名TcpEventSocket,實現如下:

先申明事件的委托類型,具體看代碼

public delegate void AcceptConnectionHandler();

public delegate void ConnectCompletedHandler(bool connected); //connected表明連接成功與否

public delegate void DataCanSendHandler();

public delegate void DataCanReceiveHandler(int buffersize); //當前可以接受的數據量

public delegate void SocketClosedHandler();

這些類型具體什么意思應該能看出來吧,另外還要申明對應的事件

public event AcceptConnectionHandler AcceptConnection;

public event ConnectCompletedHandler ConnectCompleted;

public event DataCanSendHandler DataCanSend;

public event DataCanReceiveHandler DataCanReceive;

public event SocketClosedHandler SocketClosed;

另外加了幾個虛方法,這幾個方法用來觸發事件

protected virtual void OnAcceptConnection();
protected virtual void OnConnectCompleted(bool connected)

protected virtual void OnDataCanSend()
protected virtual void OnDataCanReceive(int buffersize)

protected virtual void OnSocketClosed()

為了在適當的事機啟動檢測線程,我重寫了幾個基類的方法:

new public void Listen(int backlog)

{

base.Listen(backlog);

sockState = SocketState.Listenning;

if (!checkThread.IsAlive)

checkThread.Start();

}

new public void Connect(EndPoint remoteEP)

{

try

{

base.Connect(remoteEP);

this.Blocking = false; //設置非阻塞狀態,以便事件通知的效率

if (!checkThread.IsAlive)

checkThread.Start();

}

catch(SocketException)

{

OnConnectCompleted(false);

}

}

這兩個方法實際編成中都應該首先被調用的,所以有他們啟動檢測線程比較合適,另外線程啟動了必然也要中止,于是我重寫了Close方法

new public void Close()

{

if(checkThread.IsAlive) //先中止線程再關閉連接

checkThread.Abort();

base.Close();

sockState = SocketState.Disconnected;

OnSocketClosed();

}

于是剩下的工作就是怎么檢測套接字了,Socket類有個Select的靜態方法,它可以檢測很多套接字的狀態,不過這里只需要檢測一個,所以直接用Socket的Poll方法,Poll的具體用法可以看MSDN,我這里用代碼說明我對套接字的檢測方法

while(true) //循環檢查

{

if (sockState == SocketState.Disconnected) //如果當前沒有連接

{

if (Poll(500, SelectMode.SelectWrite))

OnConnectCompleted(true); //如果為可寫狀態,則表示連接成功

}

else if(sockState == SocketState.Listenning)

{

if (Poll(500, SelectMode.SelectRead)) //如果在監聽狀態發現套接字有數據可讀則表示已經有人連接上來可以調用Accept接受連接

OnAcceptConnection();

}

else //這里sockState = SocketState.Connected

{

if (Poll(500, SelectMode.SelectWrite)) //如果有可寫狀態則表示可以發送數據

OnDataCanSend();

if (Poll(500, SelectMode.SelectRead)) //如果有可讀狀態

{

if (Available > 0) //如果有數據可讀表示可以調用Receive接受數據

OnDataCanReceive(Available);

else

{

OnSocketClosed(); //沒數據可讀表示連接已經關閉

break;

}

}

}

//如果沒有連接并且有錯誤狀態,則連接失敗

if (sockState == SocketState.Disconnected && Poll(500, SelectMode.SelectError))

OnConnectCompleted(false);

}

這里的OnXXX方法就是執行事件通知的方法,并且派生類中可以重載這些方法直接獲得事件通知而不需要掛界別的事件通知處理函數(類似于MFC的OnAccept等虛函數)。不過派生的函數集的調用基類的相應方法哦。很可惜沒有重寫Socket.Accept方法,讓它返回一個TcpEventSocket,這樣應該就比較完整了,只可惜我不知道怎么做^_^,如果誰知道的話歡迎指教。

事件通知機制已經基本完成,所缺乏的只是大量的測試(我做了幾下最簡單的測試,慚愧!!^_^)

如果有問題請聯系 yzx110@bit.e

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美
  • <li id="86scu"><menu id="86scu"></menu></li>
    <li id="86scu"></li>
    <button id="86scu"></button>
  • <s id="86scu"></s><button id="86scu"><menu id="86scu"></menu></button>
  • 五月天丁香花婷婷| 亚洲黄色网址在线观看| 六月婷婷在线视频| 99久久久精品视频| 毛片在线视频观看| 青青在线免费视频| 国产人妻互换一区二区| 99中文字幕在线观看| 干日本少妇视频| 久久这里只有精品8| 黄色一级片国产| 真人抽搐一进一出视频| 9久久9毛片又大又硬又粗| 18禁免费观看网站| 人妻丰满熟妇av无码区app| 午夜两性免费视频| 公共露出暴露狂另类av| 人妻av中文系列| 国产成人在线免费看| 青青青在线视频免费观看| 欧美成人福利在线观看| 9色视频在线观看| 波多野结衣乳巨码无在线| 国产成人精品视频免费看| 日本激情综合网| 8x8x华人在线| 欧美自拍小视频| av电影一区二区三区| 欧美亚洲一二三区| 欧美在线a视频| 少妇一晚三次一区二区三区| 国产一区二区三区精彩视频| 中文字幕成人在线视频| 国产精品无码免费专区午夜| 欧美黄色免费影院| 手机在线视频你懂的| 六月丁香婷婷在线| 国产奶头好大揉着好爽视频| 99热在线这里只有精品| 日韩国产精品毛片| 国产aaaaa毛片| 丰满少妇大力进入| 91精产国品一二三产区别沈先生| 分分操这里只有精品| 美女在线视频一区二区| 久久网站免费视频| 99在线免费视频观看| 精品国产乱码久久久久久1区二区| 国产乱子伦农村叉叉叉| 日韩精品第1页| 污版视频在线观看| 国产精品第12页| 欧美极品欧美精品欧美| 中文字幕乱码免费| 免费不卡av网站| 亚洲精品视频三区| 国产精品久久久毛片| 能在线观看的av| 91国视频在线| 久久久性生活视频| 亚洲色成人www永久在线观看| 国产乱码一区二区三区四区| 欧美黄色性生活| 熟妇人妻无乱码中文字幕真矢织江| 欧美中日韩在线| 大荫蒂性生交片| 大陆av在线播放| 成人免费观看cn| 欧美女人性生活视频| av动漫免费看| 日本免费观看网站| 亚洲怡红院在线| 色撸撸在线观看| 精品一区二区成人免费视频| 青娱乐国产精品视频| 精产国品一二三区| 免费一级淫片aaa片毛片a级| www.xxx麻豆| 黄色动漫网站入口| 亚洲精品自拍网| www.污污视频| 国产精品自拍合集| 免费黄色福利视频| 污污的网站18| 一级性生活视频| 黄页免费在线观看视频| 成人三级视频在线播放 | 久久久久国产精品熟女影院| 精品国产成人av在线免| www午夜视频| wwwwww欧美| 无码少妇一区二区三区芒果| 不卡中文字幕在线观看| 污污污污污污www网站免费| 欧美日韩一道本| 亚洲欧美日韩精品一区| 免费拍拍拍网站| 亚洲一级免费在线观看| 国产中文字幕乱人伦在线观看| 国产成人av影视| av片在线免费| 国产乱女淫av麻豆国产| 成人免费观看cn| 亚洲涩涩在线观看| 久久9精品区-无套内射无码| 久久精品在线免费视频| 免费观看成人网| 国产成人永久免费视频| 欧美三级午夜理伦三级富婆| 国产美女作爱全过程免费视频| 日本爱爱免费视频| 日韩精品一区二区免费| 91亚洲一区二区| 香蕉视频禁止18| 波多野结衣之无限发射| youjizz.com亚洲| 别急慢慢来1978如如2| 成人性生活视频免费看| 岛国av免费在线| 久久精品影视大全| 午夜肉伦伦影院| 国产中文字幕乱人伦在线观看| 91亚洲一区二区| 精品亚洲视频在线| 最新国产黄色网址| 小泽玛利亚视频在线观看| 日日摸天天爽天天爽视频| 成人免费观看视频在线观看| 亚洲国产成人精品无码区99| 懂色av粉嫩av蜜臀av| www.桃色.com| 国内外成人激情免费视频| 桥本有菜av在线| japanese在线播放| 国产又粗又长又爽视频| 91九色国产ts另类人妖| 青青草原网站在线观看| 穿情趣内衣被c到高潮视频| 日本黄网站色大片免费观看| 91手机视频在线| 日本一二三区视频在线| 伊人久久在线观看| 日本大胆人体视频| 五十路熟女丰满大屁股| 免费日韩视频在线观看| 日本xxxxxxx免费视频| 日本黄大片一区二区三区| 国产高清999| 国产91porn| 久久婷婷五月综合色国产香蕉| 黑森林福利视频导航| 日本人视频jizz页码69| 亚洲精品国产一区二区三区| 日韩精品一区二区三区电影| 国产精品12345| 天天碰免费视频| 日韩不卡的av| 波多野结衣综合网| 无码人妻丰满熟妇区毛片| 亚洲一级片免费| 激情成人开心网| 色综合色综合色综合色综合| 在线观看成人免费| 激情综合网俺也去| 四虎4hu永久免费入口| 久久精品99国产| 久久久99精品视频| 北条麻妃在线视频| 国产乱人伦精品一区二区三区| 成年人视频网站免费观看| 在线一区二区不卡| 黄页免费在线观看视频| 午夜免费一级片| caoporn超碰97| 国产成人在线小视频| 欧美日韩精品区别| 日韩av资源在线| 亚洲自拍第三页| 国产精品三级一区二区| 国产福利影院在线观看| 人妻少妇精品久久| 欧美在线观看视频免费| 在线观看成人免费| 大桥未久一区二区| 91 视频免费观看| 麻豆三级在线观看| 亚洲欧洲日本精品| 国产又大又黄又粗又爽| 一本久道中文无码字幕av| 国产v片免费观看| 久久久久久久久久网| 97碰在线视频| 又大又硬又爽免费视频| 四虎4hu永久免费入口| 成人在线免费高清视频| 青娱乐国产精品视频| 日本美女爱爱视频| 国产免费一区二区视频| 成人毛片视频网站| 亚洲免费av一区二区三区|