MS的SOCKET使用的是异步,因此你说的有可能。你写的代码有隐患!!“程序在第一个信息分析是正确的,动作也正常,然后再接受的时候就出错了”
这里是方面意思,你最好还是先讲清楚你的问题。

解决方案 »

  1.   

    算法出错,导致pData超界写入
    看来你是想收100字节到pData中对吧?
    这样改:
            DataSize=0;
            while(DataSize<100 && (ret=Receive(pBuf,100-DataSize))>0){
                memcpy(pData+DataSize,pBuf,ret);
                DataSize+=ret;
            }
      

  2.   

    谢谢。
    两位所言极是。
    上面的代码是有问题,这是我把很多错误处理隐调了的结果。
    问题不在这里
    接受到的信息肯定不到100字节
    本来有内存重新分配
    realloc 
    问题是。
    他返回的出口不对阿
      

  3.   

    "问题是它从Analyzer(4)进去的
    可是执行完了之后,返回竟然返回到2,有时候断点跟踪也会返回到别的语句,就是不回到
    Anaylyzer的下一句。"
    程序是不是多线程的, 而在调试的时候又多个线程在动, 导致debug 在多个线程之间切换, 由上述的现象, 
    另外, 如果你的CConnetSocket是从CAsyncSocket 或 CSocket 派生的, OnReceive消息, 是在又数据进入win socket 接受缓冲的时候被触发的, 但这是要接受的数据量并不一定是100呀,你在一次OnReceive 中重复直到有100个byte 的数据量收到, 如果这100个bytes是分好几次被win socket接受的, 在头一次的OnReceive 中就被强行收完, 后面几次的OnReceive 调用岂不是又要等到下一个, 甚至是下几次的100 bytes 发来, 我认为在OnReceive 中就是把这次该收的收掉, 放到一个缓冲中去, 在出了OnReceive 后, 来分析缓冲中的数据, 不到需要量的在下次有数据来的时候在分析, 到需要量的根据实际工作 处理接受到的数据。
      

  4.   

    先将pbuf,pdata变为CConnetSocket的变量,然后跟踪它的值,就能知道是不是由于下一次的OnReceive引起的了
      

  5.   

    或者Analyzer不传指针,传值也行