swift socket通信中如何首先获得包长并发送

let len: UInt32 = UInt32(data.count) //包体已经写入data中

var convertedNumber = len.bigEndian

let lendata = Data(bytes: &convertedNumber, count: 4)

上面代码用来获取包长,并写入一个新的Data中以便在socket中发送,要注意的是,len必须手动指定为UInt32,否则在64位机器上,len是8字节大小的,按照上面代码跑完,lendata是全零,因为只取了convertedNumber的低4字节 比如len=29,如果是64位机器,16进制显示为000000000000001d,转成bigendian就是1d00000000000000,然后执行let lendata = Data(bytes: &convertedNumber, count: 4),就只取了低四字节,为全0 一般网络通信,包长是用4字节整数来表示,那么,此处我们将len显式的定义为UInt32就行,64位机器上Int长度就是64(8字节),不是32(4字节) 被这个坑搞了很久,记录一下!!!!

转载于:https://my.oschina.net/u/3697201/blog/1550782

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值