理论是灰色的,但实践之树长青🌲
概要
最近用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
欢迎大家一起交流学习!