国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C與C# socket 跨平臺通訊傳輸結構體

2019-11-17 02:25:41
字體:
來源:轉載
供稿:網友

C與C# socket 跨平臺通訊傳輸結構體

最近需要寫一個C組成的服務器端與C#的客戶端進行交互的軟件,剛開始寫的時候發現C#端解析時候出現了故障,經過仔細研究后發現原因是發送方傳輸太快,出現了所謂粘包的現象。也就是在C#端的Receive()。這個函數返回的是多個結構體連起來的數據,這當然是無法解析的。我的解決方案如下:

 List<byte[]> listb = new List<byte[]>();..........int recv = newclient.Receive(b1);for (int x = 0; x < recv / 12; x++){byte[] b2 = new byte[12];int i=0;for (int lc = x * 12; lc < x * 12 + 12; lc++){b2[i] = b1[lc];i++;}listb.Add(b2);}

  這樣一來就直接解析listb中的元素就可以了,直接

 foreach(var i in listb)                    {................                     }

  但是在之后的解析之中還是出現了問題,我的結構體元素中后半部分的數字不是我發送端傳送的,也不是亂碼。后來再仔細檢查發現,由于SERVER端是C寫的,CLIENT是C#寫的,兩邊是在不同的環境下。而C在聲明結構體的時候,會有所謂“內存對齊”的現象發生。這樣一來,在轉換的地方會有中間一部分二進制是由編譯器生成用來填充的數字。我的解決方案是在其中填充0字節(PS.終于知道為啥Rip啥的協議格式會如此詭異了)。填充完成后,結構體大小不變,C#端解析成功。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 柳江县| 井陉县| 巴东县| 娄底市| 景泰县| 伊金霍洛旗| 滨海县| 若羌县| 建始县| 高雄市| 方山县| 芜湖县| 惠东县| 福州市| 嘉兴市| 鄂托克前旗| 时尚| 东乡| 彭水| 三原县| 罗甸县| 邵阳市| 铁岭市| 泸定县| 丹阳市| 洪江市| 鄯善县| 安吉县| 墨竹工卡县| 常德市| 澄江县| 龙门县| 讷河市| 和平区| 彭水| 嫩江县| 平昌县| 平昌县| 宝鸡市| 拉萨市| 友谊县|