找回密碼
 注冊帳號

掃一掃,訪問微社區

開果 一個簡單 小型的C#Socket網絡通信庫的制作(服務器客戶端互通)(上)

38
回復
797
查看
打印 上一主題 下一主題
[ 復制鏈接 ]

6

主題

10

帖子

87

積分

Rank: 9Rank: 9Rank: 9

UID
327626
好友
1
蠻牛幣
59
威望
0
注冊時間
2019-7-19
在線時間
59 小時
最后登錄
2019-8-13

馬上注冊,結交更多好友,享用更多功能,讓你輕松玩轉社區。

您需要 登錄 才可以下載或查看,沒有帳號?注冊帳號

x
本帖最后由 開果 于 2019-8-1 14:44 編輯

大家好我是匠人團隊的開果


就一個不用 理解之間的通信代碼原理之類的   幾句代碼快速搭建服務器和客戶端的

思維導圖:




過程大概是KGSocketClient/KGSocketServe 創建了KGNetSession 會話管理進行發送/接收數據的監聽會進行一次開啟事件 OnStartRecive() 函數回調, 監聽到的數據包KGNetPacket 通過KGPackExtension 轉化成KGNetData自已定義的數據結構類,然后在KGNetSession里面的  OnReciveData(T) 函數 進行回調   

下面直接開始代碼解析

1.KGNetData  自定義的數據類


這個好像沒啥好說的=。= 自定義的數據類都要繼承他



[C#] 純文本查看 復制代碼
    //傳輸的數據都必須打上可序列化的標簽
    [Serializable]
      public abstract class KGNetData
        {
            public int Err;
            public int Cmd;
        }
    




2.KGNetPacket 消息包的數據類




因為每條消息包 你不知道他的長度 所以要在前面利用BitConverter.GetBytes獲取一個包的長度Int值

這個int就站byte[]四個長度  所以HeadLength=4,然后獲取到長度了在SetPackLen給PacketBuff賦值上獲取到的長度


[C#] 純文本查看 復制代碼
     public class KGNetPacket
        {
   
            public byte[] PacketBuff;
            public int HeadLength = 4;//這里是標頭的長度
            public int HeadIndex;//這里有時候分包接收到一兩個 所以要進行記錄已經接收到兩個了 還差幾個
    
            public int PacketBuffLength ;//數據包的長度
            public int PacketIndex;//和上面一樣意思
    
            /// <summary>
            /// 獲取四個字節轉成的int長度
            /// </summary>
            /// <param name="data"></param>
            /// <returns></returns>
            public  void SetPackLen()
            {
                PacketBuffLength = BitConverter.ToInt32(PacketBuff, 0);
                PacketBuff =new byte[PacketBuffLength];
            }
    
    
            public void Refresh()
            {
                PacketBuff = null;
                PacketIndex = 0;
                HeadIndex = 0;
            }
        }

3.KGPackExtension 打消息包拓展工具類








4.KGLog 打印消息的 工具類
所有打印都是通過KLog()進行打印的 在別的地方可以在LogEvent就可以獲取到打印事件了

[C#] 純文本查看 復制代碼
    /// <summary>
    /// 打印消息的工具拓展類
    /// </summary>
    public static class KGLog
    {
        public static bool RunLog = true;

        //留的一個打印事件委托
        private static  Action<string, LogLevel> LogEvent = null;

        //這里是打印消息的方法
        public static void KLog(this string Logdata,LogLevel logLevel=LogLevel.Common)
        {
            if (!RunLog)
                return;

            LogEvent?.Invoke(Logdata,logLevel);

            Console.WriteLine("{0}-----------------{1}", Logdata,logLevel.ToString());
         

        }

        public static void SetLog(this Action<string, LogLevel> log,bool Run=true)
        {
            LogEvent = log;
            RunLog = Run;
        }
    }

    //打印等級
    public enum  LogLevel
    {
        None=0,
        Common=1,
        Warn=2,
        Err=3

    }


好了我們下篇繼續

工程地址
游客,如果您要查看本帖隱藏內容請回復
u3d萌新QQ群844087555 歡迎進來灌水=。=







回復

使用道具 舉報

7日久生情
2994/5000
排名
361
昨日變化

0

主題

121

帖子

2994

積分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
63538
好友
1
蠻牛幣
3844
威望
0
注冊時間
2014-12-25
在線時間
1121 小時
最后登錄
2019-8-13
沙發
2019-7-30 10:04:30 只看該作者
666666666666666666
回復 支持 反對

使用道具 舉報

7日久生情
4114/5000
排名
184
昨日變化

0

主題

684

帖子

4114

積分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
35380
好友
2
蠻牛幣
2625
威望
0
注冊時間
2014-7-20
在線時間
1214 小時
最后登錄
2019-8-13
QQ
板凳
2019-7-30 12:14:11 只看該作者
udsdajkfhkj
回復

使用道具 舉報

3偶爾光臨
245/300
排名
11231
昨日變化

1

主題

44

帖子

245

積分

Rank: 3Rank: 3Rank: 3

UID
311288
好友
1
蠻牛幣
800
威望
0
注冊時間
2019-1-9
在線時間
110 小時
最后登錄
2019-8-12
地板
2019-7-30 13:53:34 只看該作者
不錯不錯
回復

使用道具 舉報

3偶爾光臨
278/300
排名
11818
昨日變化

4

主題

40

帖子

278

積分

Rank: 3Rank: 3Rank: 3

UID
151866
好友
0
蠻牛幣
121
威望
0
注冊時間
2016-6-13
在線時間
152 小時
最后登錄
2019-8-13
5#
2019-7-30 16:53:18 只看該作者
感謝樓主
回復

使用道具 舉報

4四處流浪
374/500
排名
10113
昨日變化

5

主題

67

帖子

374

積分

Rank: 4

UID
61899
好友
7
蠻牛幣
5
威望
0
注冊時間
2014-12-17
在線時間
194 小時
最后登錄
2019-8-13
6#
2019-7-30 21:03:23 只看該作者
學習了,謝謝分享
回復

使用道具 舉報

0

主題

10

帖子

16

積分

Rank: 1

UID
282778
好友
0
蠻牛幣
40
威望
0
注冊時間
2018-5-25
在線時間
6 小時
最后登錄
2019-8-5
7#
2019-7-31 09:47:07 只看該作者

學習了,謝謝分享
回復

使用道具 舉報

7日久生情
4068/5000
排名
142
昨日變化

0

主題

377

帖子

4068

積分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
2484
好友
2
蠻牛幣
4108
威望
0
注冊時間
2013-8-23
在線時間
1353 小時
最后登錄
2019-8-12
8#
2019-7-31 10:38:30 只看該作者
看著很不錯啊
回復

使用道具 舉報

5熟悉之中
701/1000
排名
3675
昨日變化

0

主題

6

帖子

701

積分

Rank: 5Rank: 5

UID
274529
好友
0
蠻牛幣
5778
威望
0
注冊時間
2018-3-28
在線時間
287 小時
最后登錄
2019-8-13
9#
2019-7-31 16:19:46 只看該作者
666666學習一下
回復

使用道具 舉報

5熟悉之中
952/1000
排名
5174
昨日變化

1

主題

315

帖子

952

積分

Rank: 5Rank: 5

UID
258102
好友
1
蠻牛幣
1357
威望
0
注冊時間
2017-12-6
在線時間
358 小時
最后登錄
2019-8-9

邁向小康

10#
2019-7-31 17:27:15 只看該作者
學習到了,感謝分享
回復 支持 反對

使用道具 舉報

5熟悉之中
928/1000
排名
2760
昨日變化

0

主題

130

帖子

928

積分

Rank: 5Rank: 5

UID
8578
好友
0
蠻牛幣
1569
威望
0
注冊時間
2013-11-20
在線時間
270 小時
最后登錄
2019-8-13
11#
2019-7-31 20:25:08 只看該作者
感謝分享~~
回復

使用道具 舉報

7日久生情
2390/5000
排名
479
昨日變化

2

主題

97

帖子

2390

積分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
69739
好友
0
蠻牛幣
3056
威望
0
注冊時間
2015-1-20
在線時間
749 小時
最后登錄
2019-8-2
12#
2019-8-1 09:00:41 只看該作者
學習學習
回復

使用道具 舉報

7日久生情
4281/5000
排名
86
昨日變化

1

主題

437

帖子

4281

積分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
28000
好友
0
蠻牛幣
4021
威望
0
注冊時間
2014-6-4
在線時間
1197 小時
最后登錄
2019-8-13
13#
2019-8-1 10:18:13 只看該作者
謝謝~~~~~~~~~~~~~
回復

使用道具 舉報

0

主題

1

帖子

3

積分

Rank: 1

UID
257421
好友
0
蠻牛幣
13
威望
0
注冊時間
2017-12-2
在線時間
2 小時
最后登錄
2019-8-1
14#
2019-8-1 15:11:11 只看該作者
這就是大佬了吧
回復

使用道具 舉報

5熟悉之中
721/1000
排名
6127
昨日變化

0

主題

86

帖子

721

積分

Rank: 5Rank: 5

UID
24766
好友
0
蠻牛幣
154
威望
0
注冊時間
2014-5-12
在線時間
411 小時
最后登錄
2019-8-13
15#
2019-8-1 15:22:54 只看該作者
不錯不錯
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 注冊帳號

本版積分規則

捕鱼王怎么进不去 安徽时时走势图表 双色球复式投注计算 大乐透坐标定位走势图彩经网 彩票计划公式赚钱真假 彩神争霸8下载 安徽时时计划软件qq 体球网即时比分手机版 网上的腾讯五分彩合法吗 四川时时开奖结果查询结果 欢乐二人雀神怎么玩 威尼斯飞艇全天计划 上海时时票机 数21游戏技巧 江苏骰宝是官方的吗 推牌九玩法 赛车pk10技巧论坛