高人:
 天将将大任于斯人也,必先苦大家的心志,目前就碰到了一个问题,我开发了一个SOCKET服务器,我一直定不定期的收到信息不全的数据包或者数据有变的数据包,导致我程序访问该包的内存时出错,从而导致程序退出,不知哪位东方不败有做过,是否也有发生过这样的问题,能够帮小生想一个比较好的方案或者解决方法?

解决方案 »

  1.   

    LongHai 你在那里  在北京的话我可以帮你
      

  2.   

    真的想要高性能的话就用ACE
    单独用vc开发出来的高性能我还没有见过例如vc写的qq就是个很好的反例
      

  3.   

    楼主将主题也弄错了吧,你这问题的主题应该是"如何编写安全的socket服务器".如果你的socket服务器会出现"致我程序访问该包的内存时出错"这种问题,这完全是由于你编写的程序的代码对于接收数据的buffer的边界或者对接收到的数据的检查不足所导致.我只能说没办法帮你,只能是你自己帮助自己,出现这种问题的原因主要就是经验不足,还有就是对于写代码的安全性不是太重视,建议你看一下有关如何编写安全代码的相关资料.
      

  4.   

    真的想要高性能的话就用ACE
    单独用vc开发出来的高性能我还没有见过例如vc写的qq就是个很好的反例无稽之谈,ACE本来就不是为了高性能而开发的
    设计良好的专用服务器框架性能肯定高过ACE
      

  5.   

    如果是TCP的
    感觉楼主根本没做拆包
      

  6.   


    回复人: pripor(蹲在墙头等红杏)
    真的想要高性能的话就用ACE
    单独用vc开发出来的高性能我还没有见过例如vc写的qq就是个很好的反例
    --------------
    qq算服务器吗,qq是客户端啊,怎么成了你的反例了?
    ace用什么实现的,还不是api呀,你自己水平次但不要怀疑别人能做出好东西。
      

  7.   

    我有做过粘包的分折,我只是想确认一下是服务器收到了数据不全的包还是我协议设计的问题,我不懂如果是TCP SOCKET有没有这种情况?
      

  8.   

    TCP是基于数据流的,所以你的包要规定好格式。要么是定长数据包,要么数据包中就要包含数据包的长度信息。ACE的初衷是做到各操作系统通用,而不是高效吧?
      

  9.   

    高性能稳定的SOCKET服务器,学习.设计很重要.
      

  10.   

    稳定的就作过,高性能谈不上,惭愧另外:ACE不适合普通开发,也并非高性能
    花时间去搞懂ACE、排除开发中遇到的、隐藏的ACE错误、陷阱,还不如踏踏实实的自己写框架,效率或性能、扩展性、自由度比用ACE好N倍
      

  11.   

    直接扔掉怎么行啊!TCP粘包是很正常的,扔掉岂不丢失数据了?