由于之前要模拟XX通信,于是打算试试Socket,虽然在Java早早已玩过这个东西并且当时是毫无问题,不过用C++来弄之后就开始发现各种问题。
1、“数据丢失”。最早不知道是什么原因,因为没有做消息错误的处理,认为是消息丢失了,反馈的数量和发送过去的是不对等的,导致出错。后来得知在发送的时候有可能会把多条消息合并成一条发送出去,刚开始我是没想到会有这样的情况,直到某人在群里问到之后才知道原来是这样,然后另一个某人说要处理这个就把每个包加上长度,因为感觉这样太麻烦而且又是模拟所以干脆改成同一长度,于是“数据丢失”问题解决。
2、非本地的发送。虽然说Socket最大的作用就是这个了,但是这里因为是模拟所以是不需要的,但是还是试了一下,结果惨不忍睹,只有初始化消息能正确发送,之后的消息全部乱七八糟。这让我无比蛋疼,因为在玩Java的时候只要本地测试正确,放到网络上都是没问题的,为什么C++的就不是这样,虽然不知道java对Socket进行了什么封装,但是就本机和非本机怎么会差别这么多。于是某人说要抓包看看,于是抓包发现一个问题:在没有任何操作的情况下(不会发消息)数据量也一直在涨。在我看来就算我知道这个结果我也不知道该怎么处理。而且最早的时候我测试过一次是正常的,不过当时还没那么多消息。总之目前是没有搞定,也没有搞定的必要,以后再碰到再解决,或者那个高人直接指点一下。