亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

C# Socket系列二 簡單的創建 socket 通信

2019-11-17 02:31:18
字體:
來源:轉載
供稿:網友

C# Socket系列二 簡單的創建 socket 通信

看了系列一 我們開啟了對socket tcp的監聽狀態,那么這一章我們來講解怎么創建socket的通信代碼

我新建一個類TSocketBase

  1 public abstract class TSocketBase  2     {  3         //封裝socket  4         internal Socket _Socket;  5         //回調  6         PRivate AsyncCallback aCallback;  7         //接受數據的緩沖區  8         private byte[] Buffers;  9         //標識是否已經釋放 10         private volatile bool IsDispose; 11         //10K的緩沖區空間 12         private int BufferSize = 10 * 1024; 13         //收取消息狀態碼 14         private SocketError ReceiveError; 15         //發送消息的狀態碼 16         private SocketError SenderError; 17         //每一次接受到的字節數 18         private int ReceiveSize = 0; 19         //接受空消息次數 20         byte ZeroCount = 0; 21  22         public abstract void Receive(byte[] rbuff); 23  24         public void SetSocket() 25         { 26             this.aCallback = new AsyncCallback(this.ReceiveCallback); 27             this.IsDispose = false; 28             this._Socket.ReceiveBufferSize = this.BufferSize; 29             this._Socket.SendBufferSize = this.BufferSize; 30             this.Buffers = new byte[this.BufferSize]; 31         } 32  33  34         /// <summary> 35         /// 關閉并釋放資源 36         /// </summary> 37         /// <param name="msg"></param> 38         public void Close(string msg) 39         { 40             if (!this.IsDispose) 41             { 42                 this.IsDispose = true; 43                 try 44                 { 45                     try { this._Socket.Close(); } 46                     catch { } 47                     IDisposable disposable = this._Socket; 48                     if (disposable != null) { disposable.Dispose(); } 49                     this.Buffers = null; 50                     GC.SuppressFinalize(this); 51                 } 52                 catch (Exception) { } 53             } 54         } 55  56  57         /// <summary> 58         /// 遞歸接收消息方法 59         /// </summary> 60         internal void ReceiveAsync() 61         { 62             try 63             { 64                 if (!this.IsDispose && this._Socket.Connected) 65                 { 66                     this._Socket.BeginReceive(this.Buffers, 0, this.BufferSize, SocketFlags.None, out SenderError, this.aCallback, this); 67                     CheckSocketError(ReceiveError); 68                 } 69             } 70             catch (System.Net.Sockets.SocketException) { this.Close("鏈接已經被關閉"); } 71             catch (System.ObjectDisposedException) { this.Close("鏈接已經被關閉"); } 72         } 73  74  75  76         /// <summary> 77         /// 接收消息回調函數 78         /// </summary> 79         /// <param name="iar"></param> 80         private void ReceiveCallback(IAsyncResult iar) 81         { 82             if (!this.IsDispose) 83             { 84                 try 85                 { 86                     //接受消息 87                     ReceiveSize = _Socket.EndReceive(iar, out ReceiveError); 88                     //檢查狀態碼 89                     if (!CheckSocketError(ReceiveError) && SocketError.Success == ReceiveError) 90                     { 91                         //判斷接受的字節數 92                         if (ReceiveSize > 0) 93                         { 94                             byte[] rbuff = new byte[ReceiveSize]; 95                             Array.Copy(this.Buffers, rbuff, ReceiveSize); 96                             this.Receive(rbuff); 97                             //重置連續收到空字節數 98                             ZeroCount = 0; 99                             //繼續開始異步接受消息100                             ReceiveAsync();101                         }102                         else103                         {104                             ZeroCount++;105                             if (ZeroCount == 5) { this.Close("錯誤鏈接"); }106                         }107                     }108                 }109                 catch (System.Net.Sockets.SocketException) { this.Close("鏈接已經被關閉"); }110                 catch (System.ObjectDisposedException) { this.Close("鏈接已經被關閉"); }111             }112         }113 114         /// <summary>115         /// 錯誤判斷116         /// </summary>117         /// <param name="socketError"></param>118         /// <returns></returns>119         bool CheckSocketError(SocketError socketError)120         {121             switch ((socketError))122             {123                 case SocketError.SocketError:124                 case SocketError.VersionNotSupported:125                 case SocketError.TryAgain:126                 case SocketError.ProtocolFamilyNotSupported:127                 case SocketError.ConnectionAborted:128                 case SocketError.ConnectionRefused:129                 case SocketError.ConnectionReset:130                 case SocketError.Disconnecting:131                 case SocketError.HostDown:132                 case SocketError.HostNotFound:133                 case SocketError.HostUnreachable:134                 case SocketError.NetworkDown:135                 case SocketError.NetworkReset:136                 case SocketError.NetworkUnreachable:137                 case SocketError.NoData:138                 case SocketError.OperationAborted:139                 case SocketError.Shutdown:140                 case SocketError.SystemNotReady:141                 case SocketError.TooManyOpenSockets:142                     this.Close(socketError.ToString());143                     return true;144             }145             return false;146         }147 148         /// <summary>149         /// 發送消息方法150         /// </summary>151         internal int SendMsg(byte[] buffer)152         {153             int size = 0;154             try155             {156                 if (!this.IsDispose)157                 {158                     size = this._Socket.Send(buffer, 0, buffer.Length, SocketFlags.None, out SenderError);159                     CheckSocketError(SenderError);160                 }161             }162             catch (System.ObjectDisposedException) { this.Close("鏈接已經被關閉"); }163             catch (System.Net.Sockets.SocketException) { this.Close("鏈接已經被關閉"); }164             buffer = null;165             return size;166         }167     }

上面我們事先了socket的異步接受消息,和同步發送消息已經關閉釋放資源代碼

接受消息net底層提供的接受消息的方法有很多,為什么我們要選擇上面所寫的呢?那是為了兼容U3D,silverlight, wpf, wp, wf,等程序可執行,不在重復做相同工作。

現在我們來創建一個實現類TSocketClient

 1   public class TSocketClient : TSocketBase 2     { 3         /// <summary> 4         /// 是否是服務器端的資源 5         /// </summary> 6         bool isServer = false; 7  8         /// <summary> 9         /// 客戶端主動請求服務器10         /// </summary>11         /// <param name="

因為是測試示例,所以我把服務器和客戶端實現類寫成了,只是用來不同的構造函數來區分,是客戶端還是服務器的標識


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情a∨在线视频播放| 日韩中文字幕亚洲| 日韩精品免费观看| 自拍偷拍亚洲欧美| 国产精品福利小视频| 久久久国产精品一区| 久久99国产精品久久久久久久久| 欧美黑人xxxⅹ高潮交| 国产综合久久久久久| 国产日韩精品在线观看| 国产黑人绿帽在线第一区| 浅井舞香一区二区| 国产精品久久一区主播| 国产精品久久久久久久久久| 国产精品久久久久999| 日韩精品在线免费观看| 亚洲网站在线播放| 欧美激情第99页| 日韩免费观看高清| 91精品综合久久久久久五月天| 亚洲视频777| 欧美影院久久久| 国产成人精品视频| 亚洲国产精品人人爽夜夜爽| 亚洲影院高清在线| 国产不卡精品视男人的天堂| 亚洲欧美日韩精品久久奇米色影视| 日韩中文字幕国产| 国产精品视频公开费视频| 精品毛片网大全| 欧美精品一区在线播放| 69av在线视频| 欧美国产日韩二区| 国产精品亚洲第一区| 久久久国产精品一区| 性日韩欧美在线视频| 欧美性xxxxxxxxx| 国产69精品久久久久9999| 国产偷国产偷亚洲清高网站| 国产欧美久久一区二区| 亚州成人av在线| 中文字幕精品在线视频| 欧美成人免费在线视频| 国产一区二区日韩精品欧美精品| 91精品国产高清自在线看超| 一本大道香蕉久在线播放29| 色www亚洲国产张柏芝| 成人国产精品免费视频| 国产一区二区成人| 国产成人一区二区在线| 在线日韩中文字幕| 国产精品wwwwww| 懂色av影视一区二区三区| 日韩av免费看网站| 国内精品久久久久影院优| 国a精品视频大全| 欧美壮男野外gaytube| 亚洲电影免费观看高清完整版在线| 98精品国产高清在线xxxx天堂| 欧美日韩电影在线观看| 最新国产精品拍自在线播放| 欧美日韩成人精品| 久久人人97超碰精品888| 国产午夜精品理论片a级探花| 欧美第一黄色网| 狠狠色香婷婷久久亚洲精品| 亚洲欧洲在线免费| 91久久夜色精品国产网站| 久久香蕉国产线看观看av| 91老司机精品视频| 亚洲老司机av| 亚洲第一中文字幕在线观看| 日韩精品视频在线免费观看| 精品久久久久久国产91| 国产美女被下药99| 国产精品96久久久久久又黄又硬| 久久久久久久久久久久av| 综合久久五月天| 日韩欧美亚洲成人| 国产美女精品视频| 91精品免费视频| 亚洲香蕉在线观看| 亚洲综合色激情五月| 日韩精品免费一线在线观看| 国产有码在线一区二区视频| 国产精品偷伦免费视频观看的| 亚洲精品永久免费精品| 国产精品第一页在线| 欧美中文字幕在线视频| 国产精品第100页| 夜夜狂射影院欧美极品| 日韩中文字幕在线视频| 国产精品揄拍500视频| 最近2019中文字幕一页二页| 国产一区二区三区在线看| 美女视频久久黄| 在线中文字幕日韩| 一区二区三欧美| 欧美在线播放视频| 69**夜色精品国产69乱| 在线播放国产精品| 欧美日韩一区二区三区| 菠萝蜜影院一区二区免费| 91色p视频在线| 国产日本欧美一区二区三区在线| 日韩国产一区三区| 91亚洲国产成人久久精品网站| 欧美专区国产专区| 美乳少妇欧美精品| 欧美高清理论片| 日韩网站免费观看| 欧洲成人免费视频| 日韩成人黄色av| 国产精品久久二区| 日韩成人在线播放| 美女视频黄免费的亚洲男人天堂| 久久成人精品一区二区三区| 97在线视频免费播放| 国产精品老牛影院在线观看| 亚洲色图25p| 欧美俄罗斯乱妇| 亚洲护士老师的毛茸茸最新章节| 夜夜嗨av一区二区三区四区| 午夜精品久久久久久久白皮肤| 亚洲自拍偷拍色图| 久久国产精品久久国产精品| 操人视频在线观看欧美| 国产mv免费观看入口亚洲| 欧美大片在线看免费观看| 2020欧美日韩在线视频| 日本电影亚洲天堂| 7m精品福利视频导航| 久久伊人91精品综合网站| 国产精品日韩在线播放| 久久成人18免费网站| 欧美贵妇videos办公室| 亚洲欧美国产精品va在线观看| 日韩在线观看免费高清完整版| 欧美日韩免费观看中文| 日韩中文字幕在线观看| 欧美激情在线有限公司| 国产日韩av在线| 欧美性xxxx| 色综合久久88色综合天天看泰| 亚洲字幕在线观看| 亚洲欧洲成视频免费观看| 国产主播精品在线| 国产精品一区电影| 91在线观看免费| 亚洲性视频网址| 国产精品看片资源| 国产精品视频白浆免费视频| 久久视频在线视频| 中文字幕精品一区二区精品| 青青草国产精品一区二区| 国产一级揄自揄精品视频| 成人啪啪免费看| 日韩av网站大全| 国产精品免费久久久久影院| 日韩欧美成人网| 国产精品三级美女白浆呻吟| 成人黄色av免费在线观看| 岛国精品视频在线播放| 精品欧美国产一区二区三区|