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

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

C#異步的Socket通信(重構局域網聊天小工具)

2019-11-17 03:35:48
字體:
來源:轉載
供稿:網友

簡要說明
        上圖左邊部分表示的是客戶端的過程, 右邊部分表示的是服務端的過程. 客戶端相比服務端在建立連接之前步驟稍微少一些, 成功建立連接后客戶端和服務端都有一個CommunicateSocket負責與對方通信, 如發送消息, 接收消息, 發送文件, 接收文件等.

        服務端, 聲明ServerSocket, 綁定(Bind)一個ip并指定這個IP的通信端口, 比如是127.0.0.1:9050, ServerSocket可以監聽來自多個IP發送的連接請求, 監聽(Listen)方法的參數可以設置允許的最多連接請求個數. 然后調用異步接受請求的方法(BeginAccept), 如果接受到某個客戶端發來連接請求, 這時定義一個新的CommunicateSocket專門負責與這個客戶端通信. 然后可以通過CommunicateSocket.BeginSend()方法給客戶端發送數據, CommunicateSocket.BeginReceive()可以接收客戶端發來的數據.

        客戶端, 有一個CommunicateSocket, 并綁定一個IP以及一個未被占用的端口, 定義IPEndPoint serverIP表示服務端Socket的IP和端口, 這樣才可以進行端口對端口之間的通信, 接下來就可以嘗試CommunicateSocket.BeginConnect(serverIP), 連接成功之后就可以發送和接收數據了, CommunicateSocket.BeginSend(), CommunicateSocket.BeginReceive().

        有些異步方法有兩種實現方式, 如BeginAccept()和AcceptAsync(), 這兩個方法有什么區別呢?  以 Begin 和 End 開頭的方法是以 APM(Asynchronous PRogramming Model)設計方法實現的異步操作, 以 Async 結尾的方法是利用稱為 EAP (Event-based Asynchronous Pattern) 的設計方法實現的異步操作.

代碼部分
1. SocketFunc類
        SocketFunc是一個抽象類, 服務端和客戶端只有建立連接的方法不同, 其它都相同, 所以把相同的部分放到這個類中.

00 public abstract class SocketFunc 

01 { 

02     //不管是服務端還是客戶端, 建立連接后用這個Socket進行通信 

03     public Socket communicateSocket = null; 

04   

05     //服務端和客戶端建立連接的方式稍有不同, 子類會重載 

06     public abstract void access(string IP, System.Action AccessAciton); 

07   

08     //發送消息的函數 

09     public void Send(string message) 

10     { 

11         if (communicateSocket.Connected == false) 

12         { 

13             throw new Exception("還沒有建立連接, 不能發送消息"); 

14         } 

15         Byte[] msg = Encoding.UTF8.GetBytes(message); 

16         communicateSocket.BeginSend(msg,0, msg.Length, SocketFlags.None, 

17             ar => { 

18                   

19             }, null); 

20     } 

21   

22     //接受消息的函數 

23     public void Receive(System.Action<string> ReceiveAction) 

24     { 

25         //如果消息超過1024個字節, 收到的消息會分為(總字節長度/1024 +1)條顯示 

26         Byte[] msg = new byte[1024]; 

27         //異步的接受消息 

28         communicateSocket.BeginReceive(msg, 0, msg.Length, SocketFlags.None, 

29             ar => { 

30                 //對方斷開連接時, 這里拋出Socket Exception 

31                 //An existing connection was forcibly closed by the remote host  

32                     communicateSocket.EndReceive(ar);  

33                 ReceiveAction(Encoding.UTF8.GetString(msg).Trim('/0',' ')); 

34                 Receive(ReceiveAction); 

35             }, null); 

36     } 

37 }

2. ServerSocket:SocketFunc類
        繼承自SocketFunc類, 類中重載了Access方法.

00 public class ServerSocket:SocketFunc 

01 { 

02     //服務端重載Access函數 

03     public override void Access(string IP, System.Action AccessAciton) 

04     { 

05         Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 

06         //本機預使用的IP和端口 

07         IPEndPoint serverIP = new IPEndPoint(IPAddress.Any, 9050); 

08         //綁定服務端設置的IP 

09         serverSocket.Bind(serverIP); 

10         //設置監聽個數 

11         serverSocket.Listen(1); 

12         //異步接收連接請求 

13         serverSocket.BeginAccept(ar => 

14             { 

15                 base.communicateSocket = serverSocket.EndAccept(ar); 

16                 AccessAciton(); 

17             }, null); 

18     } 

19 }

3. ClientSocket:SocketFunc類
        繼承自SocketFunc類, 類中重載了Access方法.

00 public class ClientSocket:SocketFunc 

01 { 

02     //客戶端重載Access函數 

03     public override void Access(string IP, System.Action AccessAciton) 

04     { 

05         base.communicateSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 

06         base.communicateSocket.Bind(new IPEndPoint(IPAddress.Any, 9051)); 

07               

08         //服務器的IP和端口 

09         IPEndPoint serverIP; 

10         try

11         { 

12             serverIP = new IPEndPoint(IPAddress.Parse(IP), 9050); 

13         } 

14         catch

15         { 

16             throw new Exception(String.Format("{0}不是一個有效的IP地址!", IP)); 

17         } 

18               

19         //客戶端只用來向指定的服務器發送信息,不需要綁定本機的IP和端口,不需要監聽 

20         try

21         { 

22             base.communicateSocket.BeginConnect(serverIP, ar => 

23             { 

24                 AccessAciton(); 

25             }, null); 

26         } 

27         catch

28         { 

29             throw new Exception(string.Format("嘗試連接{0}不成功!", IP)); 

30         } 

31     } 

32 }


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品电影网站| 欧美日韩另类字幕中文| 在线播放日韩精品| 精品久久久久久中文字幕一区奶水| 欧美成人精品h版在线观看| 国产精品影片在线观看| 欧美国产中文字幕| 国产精品日韩在线| 欧美日韩国产在线播放| 久久精品国产一区| 久久精品亚洲94久久精品| 国产精品成熟老女人| 亚洲美女性生活视频| 亚洲精品国产精品久久清纯直播| 成人a免费视频| 久久精品久久久久| 欧美性猛交xxx| 一区二区三区精品99久久| 国产精品视频精品视频| 亚洲国产精品专区久久| 亚洲视频在线看| 97国产精品人人爽人人做| 久久久久久久久久av| 亚洲成人精品视频| 国产一区二区三区在线观看视频| 欧美色道久久88综合亚洲精品| 98精品国产高清在线xxxx天堂| 日韩福利视频在线观看| 日韩电影视频免费| 欧美极品少妇xxxxⅹ免费视频| 中文字幕v亚洲ⅴv天堂| 国产成人综合亚洲| 91精品久久久久久久久久| 欧美xxxx做受欧美| 国产精品成人久久久久| 最近2019中文字幕在线高清| 亚洲性视频网址| 亚洲精品电影网| 色偷偷亚洲男人天堂| 欧美激情视频在线免费观看 欧美视频免费一| 日本欧美精品在线| 精品国产一区二区三区四区在线观看| 日韩欧美国产激情| 国产亚洲综合久久| 久久久97精品| 日韩一级裸体免费视频| 亚洲欧美一区二区激情| 中文字幕久久久av一区| 亚洲天堂男人的天堂| 欧美性在线视频| 一区二区三区在线播放欧美| 久久91精品国产91久久久| 日韩精品在线影院| 国产视频久久久久久久| 久久久99久久精品女同性| 欧美又大又粗又长| 亚洲精品成人久久电影| 精品久久久国产精品999| 精品国产一区二区三区久久| 亚洲毛片在线观看.| 国产成+人+综合+亚洲欧美丁香花| 欧洲亚洲妇女av| 精品久久久一区| 亚洲丁香婷深爱综合| 精品视频在线播放免| 欧美另类在线播放| 一个人www欧美| 91欧美精品午夜性色福利在线| 色综合天天综合网国产成人网| 日韩欧美在线视频| 日韩精品免费在线观看| 久久久国产精品免费| 色婷婷综合久久久久中文字幕1| 日韩激情在线视频| 国产成人精品久久二区二区91| 欧美日韩国产在线看| 亚洲一区二区三区777| 亚洲第一区中文99精品| 国产精品免费看久久久香蕉| 日韩欧美在线视频免费观看| 一区二区成人精品| 亚洲精品免费网站| 亚洲少妇中文在线| 92版电视剧仙鹤神针在线观看| 亚洲精品免费一区二区三区| 最好看的2019年中文视频| 亚洲欧美国产精品久久久久久久| 亚洲成人精品在线| 中文字幕日韩精品在线| 久久国产加勒比精品无码| 亚洲男人第一av网站| 欧美一级免费视频| 久久国产精品首页| 丁香五六月婷婷久久激情| 亚洲欧洲一区二区三区在线观看| 久久免费精品日本久久中文字幕| 亚洲iv一区二区三区| 亚洲欧美日韩直播| 538国产精品一区二区在线| 九九热r在线视频精品| 国产精品旅馆在线| 国产日韩中文字幕在线| 亚洲精品自拍视频| 日韩精品高清视频| 欧美精品中文字幕一区| 久久国产精品影片| 不卡av电影在线观看| 欧美尺度大的性做爰视频| 欧美视频在线观看免费网址| 久久伊人精品天天| 欧美大片欧美激情性色a∨久久| 国产精品视频最多的网站| 日韩av在线一区二区| 欧美性69xxxx肥| 亚洲精品白浆高清久久久久久| 久久视频国产精品免费视频在线| 日韩高清a**址| 久久九九有精品国产23| 亚洲欧洲xxxx| 国内精品一区二区三区| 亚洲天堂av在线免费| 亚洲精品一区av在线播放| 综合激情国产一区| 国产男女猛烈无遮挡91| 国产福利视频一区| 伊人伊成久久人综合网站| 成人a在线观看| 欧美亚洲第一页| 亚洲精品狠狠操| 精品小视频在线| 在线看欧美日韩| 精品性高朝久久久久久久| 久久久久99精品久久久久| 热久久视久久精品18亚洲精品| 国产成人免费av| 日本欧美在线视频| 欧美成人免费全部观看天天性色| 亚洲最新在线视频| 777777777亚洲妇女| 欧美人成在线视频| 久久久久免费精品国产| 8x海外华人永久免费日韩内陆视频| 国产精品草莓在线免费观看| 在线视频一区二区| 91亚洲国产成人精品性色| 欧美中文在线视频| 国产视频观看一区| 国产一区二区三区精品久久久| 日韩精品久久久久久久玫瑰园| 亚洲性生活视频在线观看| xxxxx91麻豆| 日韩激情视频在线播放| 欧洲永久精品大片ww免费漫画| 2025国产精品视频| 福利视频导航一区| 亚洲丝袜在线视频| 日韩精品极品视频免费观看| 亚洲嫩模很污视频| 亚洲人成五月天| 国产精品成人一区二区三区吃奶| 亚洲欧美成人在线| 国产精品入口免费视频一| www亚洲欧美| 欧美精品videofree1080p|