-
一、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);