flash socket与c++服务器端数据不一致的问题(转)

记录....
在一次开发项目过程中,(Flash的socket与c++的进行二进制数据通讯),之前一直是通讯正常,在flash与c++之间正常收发结构
但是在一次更新了服务器后,却发现flash接受了一下C++服务器发送过来的数据没有反应
一开始以为是C++更新出现了问题,但是把C++的测试客户端拿过来却能正常运行
那么问题是flash客户端,可是换上旧的服务器,却能正常运行。

提示连接成功到服务器,服务器也确实发出了数据....那么问题是在收数据这里
虽然怀疑服务器也有问题,但还是先从客户端调器

打开CS3的调试,仔细看网络层的数据,发现用户连接成功后接受房间列表的时候,收到的字节数与服务器发送过来的字节大小一样。那么就有可能flash网络层解析数据的问题.
可是问题旧的服务器又完全正常呢?
检查了一下,还是找不到问题的所在。只好对网络层做深的解析,在调试器里,从消息头开始分析起,然后读了多少字节,就减去多少字节,进行手工计算

终于在消息头那里发现了问题,在消息头里服务器告诉了我后面的的消息长度是256,但是实际传给我的实际长度却只有250,问题就出现在这里......

服务器的问题......结果仔细一检查,服务器代码也没问题。那么问题就是在结合同事写的C++连接数据的问题了

最后终于查出是因为VC编译器的问题。它会有自动补齐字节数的问题。也就是说,如果它遇到一个字节,会自动换成int,也就是四个字节来计算,但是实际发出去却没有变换。这样就造成发送的数据与申明的字节数不符合

最后的解决办法是,直接在收到总的消息里,直接减去消息头的数据,就完全解决了........

var bytes:ByteArray = new ByteArray();
socket.readBytes(bytes, 0, msgAllLen - 16); 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值