C# 實現Remoting雙向通訊
本篇文章主要介紹了C# 實現Remoting雙向通訊,.Net Remoting 是由客戶端通過Remoting,訪問通道以獲得服務端物件,再通過代理解析為客戶端物件來實現通訊的
閒來無事想玩玩雙向通訊,實現類似QQ的互發訊息的功能。於是乎開始學習.Net Remoting.
.Net Remoting 是由客戶端通過Remoting,訪問通道以獲得服務端物件,再通過代理解析為客戶端物件來實現通訊的。也就是說物件是由服務端建立的。
先上程式碼
首先是ICommand庫
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
IRemotingObject
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
|
第一個類就是定義一些介面,和一些委託,沒有實質性的東西。
第二個類是定義了上一個介面類中的ToClient的事件和方法,作用之後會講到。
然後就是整合ICommand介面的實質性的資料類
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
|
該類集成了MarshalByRefObject
由於Remoting傳遞的物件是以引用的方式,因此所傳遞的遠端物件類必須繼承MarshalByRefObject。MSDN對MarshalByRefObject的說明是:MarshalByRefObject 是那些通過使用代理交換訊息來跨越應用程式域邊界進行通訊的物件的基類。不是從 MarshalByRefObject 繼承的物件會以隱式方式按值封送。當遠端應用程式引用一個按值封送的物件時,將跨越遠端處理邊界傳遞該物件的副本。因為您希望使用代理方法而不是副本方法進行通訊,因此需要繼承MarshallByRefObject。
該類主要是定義了一些方法用於客戶端觸發事件,ToServer,ToClient,ToLogin,ToExit以及一些事件,客戶端發向服務端的事件,和服務端發向客戶端的事件。
_nameHash 只是記錄有哪些使用者登入了。
接下去就是客戶端和服務端了。
首先服務端:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
|
然後客戶端:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
|