Android底层Linux socket编程踩坑实录

Android底层Linux socket编程踩坑实录

作为一个安卓底层入行一年的菜鸟,领导交给了我一个网络消息中心的任务,这其中需要用到之前没有做过的socket编程,这个帖子就来记录一下我在学习实践的过程中踩到的坑吧~

1. linux的recv

Linux下的socket编程中,recv的上限值是和在windows下的recv的上限值不同的。在win socket编程中,单次recv的上限是可以达到1024x1024字节 也就是1m的。而在Linux中,单次recv1m是会报段错误的。经过试验,Linux单次的recv上限大概在128kb左右。

2. 数据处理byte转字符串

由于之前定的协议不能确定单包的数据上限,所以我在传输数据的时候使用了string的append方法进行数据拼接。在这个情况下就遇到了一个问题,如何将int类型的数字数据转化成16进制的字符串。我在网上搜索了诸多办法进行试验,发现如下问题:

1.使用sprintf,无法将数据按位准确输出,存在多0情况。
2.使用网上的转byte数组,再通过memcpy转char*的方法。发现输出乱码,并无法解析。

最后使用的方法是:将byte数组用memcpy转为unsigned char类型,再将unsigned char强转char*输出到string。

试验结果:虽然输出的str为乱码,但是内容正确读取。

	byte p[4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值