前言
第1章 網絡遊戲的開端:Echo 1
1.1 藏在幕後的服務端 1
1.2 網絡連接的端點:Socket 3
1.2.1 Socket 3
1.2.2 IP地址 3
1.2.3 端口 4
1.2.4 Socket通信的流程 6
1.2.5 TCP和UDP協議 7
1.3 開始網絡編程:Echo 8
1.3.1 什麼是Echo程序 8
1.3.2 編寫客戶端程序 8
1.3.3 客戶端代碼知識點 10
1.3.4 完成客戶端 11
1.3.5 創建服務端程序 12
1.3.6 編寫服務端程序 14
1.3.7 服務端知識點 15
1.3.8 測試Echo程序 15
1.4 更多API 16
1.5 公網和局域網 17
第2章 分身有術:異步和多路復用 19
2.1 什麼樣的代碼是異步代碼 19
2.2 異步客戶端 20
2.2.1 異步Connect 21
2.2.2 Show Me The Code 22
2.2.3 異步Receive 23
2.2.4 異步Send 26
2.3 異步服務端 29
2.3.1 管理客戶端 29
2.3.2 異步Accept 30
2.3.3 程序結構 31
2.3.4 代碼展示 31
2.4 實踐:做個聊天室 35
2.4.1 服務端 35
2.4.2 客戶端 35
2.4.3 測試 36
2.5 狀態檢測Poll 36
2.5.1 什麼是Poll 36
2.5.2 Poll客戶端 37
2.5.3 Poll服務端 38
2.6 多路復用Select 41
2.6.1 什麼是多路復用 41
2.6.2 Select服務端 42
2.6.3 Select客戶端 44
第3章 實踐出真知:大亂鬥遊戲 45
3.1 什麼是大亂鬥遊戲 45
3.2 搭建場景 46
3.3 角色類Human 49
3.3.1 類結構設計 49
3.3.2 BaseHuman 49
3.3.3 角色預設 51
3.3.4 CtrlHuman 54
3.3.5 SyncHuman 57
3.4 如何使用網絡模塊 57
3.4.1 委託 57
3.4.2 通信協議 59
3.4.3 消息隊列 60
3.4.4 NetManager類 60
3.4.5 測試網絡模塊 64
3.5 進入遊戲:Enter協議 66
3.5.1 創建角色 67
3.5.2 接收Enter協議 70
3.5.3 測試Enter協議 70
3.6 服務端如何處理消息 72
3.6.1 反射機制 72
3.6.2 消息處理函數 73
3.6.3 事件處理 74
3.6.4 玩家數據 76
3.6.5 處理Enter協議 77
3.7 玩家列表:List協議 77
3.7.1 客戶端處理 78
3.7.2 服務端處理 79
3.7.3 測試 79
3.8 移動同步:Move協議 80
3.8.1 客戶端處理 80
3.8.2 服務端處理 81
3.8.3 測試 81
3.9 玩家離開:Leave協議 82
3.9.1 客戶端處理 82
3.9.2 服務端處理 82
3.9.3 測試 82
3.10 攻擊動作:Attack協議 83
3.10.1 播放攻擊動作 83
3.10.2 客戶端處理 87
3.10.3 服務端處理 88
3.10.4 測試 88
3.11 攻擊傷害:Hit協議 89
3.11.1 客戶端處理 89
3.11.2 服務端處理 91
3.12 角色死亡:Die協議 91
3.12.1 客戶端處理 91
3.12.2 測試 92
第4章 正確收發數據流 94
4.1 TCP數據流 94
4.1.1 系統緩衝區 94
4.1.2 粘包半包現象 96
4.1.3 人工重現粘包現象 97
4.2 解決粘包問題的方法 97
4.2.1 長度信息法 97
4.2.2 固定長度法 98
4.2.3 結束符號法 98
4.3 解決粘包的代碼實現 99
4.3.1 發送數據 99
4.3.2 接收數據 99
4.3.3 處理數據 101
4.3.4 完整的示例 104
4.3.5 測試程序 106
4.4 大端小端問題 109
4.4.1 為什麼會有大端小端之分 110
4.4.2 使用Reverse()兼容大小端編碼 111
4.4.3 手動還原數值 111
4.5 完整髮送數據 112
4.5.1 不完整髮送示例 113
4.5.2 如何解決發送不完整問題 113
4.5.3 ByteArray和Queue 117
4.5.4 解決線程衝突 120
4.5.5 為什麼要使用隊列 121
4.6 高效的接收數據 122
4.6.1 不足之處 122
4.6.2 完整的ByteArray 123
4.6.3 將ByteArray應用到異步程序 129
第5章 深入了解TCP,解決暗藏問題 133
5.1 從TCP到銅線 133
5.1.1 應用層 133
5.1.2 傳輸層 134
5.1.3 網絡層 135
5.1.4 網絡接口 135
5.2 數據傳輸流程 136
5.2.1 TCP連接的建立 136
5.2.2 TCP的數據傳輸 137
5.2.3 TCP連接的終止 138
5.3 常用TCP參數 138
5.3.1 ReceiveBufferSize 138
5.3.2 SendBufferSize 139
5.3.3 NoDelay 139
5.3.4 TTL 140
5.3.5 ReuseAddress 141
5.3.6 LingerState 142
5.4 Close的恰當時機 144
5.5 異常處理 146
5.6 心跳機制 147
第6章 通用客戶端網絡模塊 148
6.1 網絡模塊設計 148
6.1.1 對外接口 148
6.1.2 內部設計 149
6.2 網絡事件 150
6.2.1 事件類型 151
6.2.2 監聽列表 151
6.2.3 分發事件 152
6.3 連接服務端 152
6.3.1 Connect 152
6.3.2 ConnectCallback 154
6.3.3 測試程序 155
6.4 關閉連接 156
6.4.1 isClosing? 157
6.4.2 Close 157
6.4.3 測試 158
6.5 Json協議 158
6.5.1 為什麼會有協議類 158
6.5.2 使用JsonUtility 159
6.5.3 協議格式 160
6.5.4 協議文件 161
6.5.5 協議體的編碼解碼 162
6.5.6 協議名的編碼解碼 163
6.6 發送數據 165
6.6.1 Send 165
6.6.2 SendCallback 166
6.6.3 測試 167
6.7 消息