理論是灰色的,但實踐之樹長青🌲
概要
最近用go實現RUDP的過程中遇到服務端和客戶端數據傳輸問題,涉及到字符串和整形數字互轉的問題,遇到的坑在這裏總結記錄一下,共同學習!
代碼
爲了在服務端向客戶端回傳整形數字,這裏採用先將數字轉換爲字符串,然後通過字節數組回傳,但是在解析過程中debug發現解析錯誤,如圖所示:
服務端代碼
客戶端代碼
問題在於string的強轉是不對的,string(int)這種強轉會導致亂碼問題,所以之後我採用strconv.Itoa(int)的方式轉換,解決了該問題!
服務端轉化代碼:
//反饋數據,以字符串形式反饋
feedbackStr := ""
start := 1
for index := range receData {
if start == 1 {
feedbackStr = strconv.Itoa(index) //itoa的轉換方式
}else {
feedbackStr = "," + strconv.Itoa(index)
}
start++
}
客戶端解析代碼:
//對反饋接收到的包從sendData清理,如果超時,發送需要重新傳送的剩餘數據
for _ , v := range packageNoBuf {
fmt.Println("發送成功數據包序列號:", v)
int, err := strconv.Atoi(v) //這次解析沒有錯誤了
if err != nil {
fmt.Println("數據轉換錯誤,<", err, ">")
return
}
}
總結
在字符串和整形數字轉換的場景中不要使用強制轉換,爲了避免數據傳輸解析過程中的錯誤,推薦使用"strconv"包下的strconv.Atoi(string)和strconv.Itoa(int)兩個方法!
個人使用Go實現的RUDP:https://github.com/SpecialAll/RUDP
歡迎大家一起交流學習!