近段時間在做unity客戶端與python伺服器之間的網路通訊,由於不同語言之間的型別封裝不同,不建議直接收發自定義的協議型別位元組序列,而是使用json字串序列進行過渡。
python提供了json模組進行序列化和反序列化,只需要掌握loads
操作和dumps
操作即可,使用十分簡單。
而c#也可以使用newtonsoft的動態鏈結庫進行json的序列化和反序列化,下面闡述一下使用的注意事項。
提取碼:iafl
根據unity的.net版本選取相應的newtonsoft.json.dll檔案,放置在assets/plugins/目錄下即可,在本專案中使用的是net40版本。
序列化反序列化目前遇到了乙個很奇怪的bug,在unity上執行專案newtonsoft.json
可以正常使用,但是專案打包發布後使用就會丟擲notsupportedexception
異常。
在building settings勾選中development build核取方塊,可以在打包專案的日誌檔案中定位到出錯的位置(就是序列化為json字串的那一行**)。
查詢了很多論壇部落格也沒有發現根本的原因所在,值得提及的是有論壇提到由於發布到ios平台時使用的是il2cpp模式,需要轉換成靜態的c++語言,意味著c#的反射無法正常使用。由於newtonsoft.json
使用了反射,所以會丟擲異常。不過我發布的平台是windows pc,按道理預設打包方式是mono,應該不會存在這樣的問題,不過還是確認一下比較好。於是我就開啟了player settings…→player→other settings→configuration,看到scripting backend,的確是mono沒錯。可是我再往下看一行,發現api compatibility level竟然是.net standard 2.0,便茅塞頓開,原來是unity的.net版本與newtonsoft.json的版本不一致所導致的異常。
所以就回到了開頭所說的,必須要保證newtonsoft.json和unity .net的版本一致性。
客戶端與伺服器端通訊
關係圖 傳送 邏輯管理器 處理邏輯傳送指令 指令解析管理器 根據協議xml解析指令成二進位制資料 把二進位制資料傳給伺服器 接收 伺服器傳送二進位制資料到客戶端 指令解析管理器 根據協議xml解析二進位制資料 根據解析資料對映到邏輯類來處理 2 1 3 20 2,2 21 1,1,2 指令名和指令名...
客戶端與伺服器端的區別
一般來說,客戶端就是我們使用的電腦 包括我們使用的瀏覽器ie,firefox 伺服器端就是存放網頁與資料庫資料的伺服器 電腦上裝的魔獸程式就是客戶端程式,你連線的伺服器 九城的伺服器 就是是伺服器端程式 我們通常所說的動態 設計一般都是b s結構的,b是browser的縮寫,就是客戶端程式。s是se...
客戶端跳轉與伺服器端跳轉
客戶端跳轉時用httpservletresopse物件的sendredirect函式實現,伺服器端跳轉是使用requestdispather物件的forward方法實現的。這兩者之間的區別主要體現在三個方面 1.使用伺服器端跳轉時,客戶瀏覽器的位址列並不會顯示目標位址的url,而是用客戶端跳轉時,位...