采用非阻塞单线程,接收到数据后解密,然后查询数据库,最后把结果返回给客户端,我为了测试性能,写了一个测试程序,给他不停的发包,我发现,在数据不是特别多的时候,比如100毫秒一个数据包,程序很稳定,但是,当我调整到50ms一个数据包的时候,就出错了,是内存访问错误,继续跟踪,是接收数据包解密的时候出的错,我发现接收的包是错误的,不是我想要的包,所以解密就出现了错误。那么,请问该怎么解决这样的问题呢?是清除缓存?还是什么杨?tcp不是可靠链接吗?应该不会出现错误啊?代码无法贴出,是用c++builder写的

解决方案 »

  1.   

    接受代码是写在一个dll中,接收解码后通过事件传给调用者
    我的系统是3层结构
    很多客户-》通讯程序-》服务程序出错是在服务程序中,我通过调试,发现通讯服务器发送的时候,有时候会sendbuf函数会返回-1,就是发送错误,然后服务程序就会出现错误,是不是这里的原因呢?
    通讯服务器发生错误的原因可能是服务程序的接受缓冲满了
      

  2.   

    建议有多线程,用队列存储数据,一个线程接收, 一个线程处理,。
    异常处理也要做。返回-1,查看wsagetlasterror
      

  3.   

    真的存在这种情况吗?我认为不会阿。 因为tcp 的滑动窗口就是为了防止,过快速度 对缓存的覆盖问题。当处理时间长,客户端会收到windows=0 这样的消息 而停止发, 只要服务器端的处理时间<75s
    是可以继续下去的。为什么会出现来不及处理缓冲区数据就被覆盖了~~ 这样的情况呢?  能给个代码吗?