现在的位置: 首页 > 综合 > 正文

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

2018年07月07日 ⁄ 综合 ⁄ 共 828字 ⁄ 字号 评论关闭
  1. 一、flash socket与c++服务器端数据不一致的问题

  2. 在一次开发项目过程中,(Flash的socket与c++的进行二进制数据通讯),之前一直是通讯正常,在flash与c++之间正常收发结构  
  3. 但是在一次更新了服务器后,却发现flash接受了一下C++服务器发送过来的数据没有反应  
  4. 一开始以为是C++更新出现了问题,但是把C++的测试客户端拿过来却能正常运行  
  5. 那么问题是flash客户端,可是换上旧的服务器,却能正常运行。  
  6.   
  7. 提示连接成功到服务器,服务器也确实发出了数据....那么问题是在收数据这里  
  8. 虽然怀疑服务器也有问题,但还是先从客户端调器  
  9.   
  10. 打开CS3的调试,仔细看网络层的数据,发现用户连接成功后接受房间列表的时候,收到的字节数与服务器发送过来的字节大小一样。那么就有可能flash网络层解析数据的问题.  
  11. 可是问题旧的服务器又完全正常呢?  
  12. 检查了一下,还是找不到问题的所在。只好对网络层做深的解析,在调试器里,从消息头开始分析起,然后读了多少字节,就减去多少字节,进行手工计算  
  13.   
  14. 终于在消息头那里发现了问题,在消息头里服务器告诉了我后面的的消息长度是256,但是实际传给我的实际长度却只有250,问题就出现在这里......  
  15.   
  16. 服务器的问题......结果仔细一检查,服务器代码也没问题。那么问题就是在结合同事写的C++连接数据的问题了  
  17.   
  18. 最后终于查出是因为VC编译器的问题。它会有自动补齐字节数的问题。也就是说,如果它遇到一个字节,会自动换成int,也就是四个字节来计算,但是实际发出去却没有变换。这样就造成发送的数据与申明的字节数不符合  
  19.   
  20. 最后的解决办法是,直接在收到总的消息里,直接减去消息头的数据,就完全解决了........  
  21.   
  22. var bytes:ByteArray = new ByteArray();  
  23. socket.readBytes(bytes, 0, msgAllLen - 16);

抱歉!评论已关闭.