C Unity客戶端與伺服器端的網路通訊

2021-10-06 02:59:15 字數 1167 閱讀 7170

近段時間在做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,而是用客戶端跳轉時,位...