各位好!
一个基于Internet的收费软件,c/s结构,基于Socket编程,一笔收费业务的处理流程如下:
1、客户端发送收费信息,可能成功、也可能失败
2、客户端等待服务端回应
3、服务端收到收费信息
4、服务端将收费信息写到数据库,可能成功、也可能失败
5、服务断回应客户端数据是否保存成功,可能成功、也可能失败我能够确定的部分:
在步骤1如果失败,客户端确定这笔业务失败,重新处理
如果步骤4失败,步骤5成功,客户端确定这笔业务失败,重新处理我不能确定的部分:
步骤1发送成功后,步骤3是否一定能够收到?如果步骤4成功,步骤5失败,客户端该怎么做呢?
其实我的问题就一个:如何能确保客户端总是得到服务端数据是否保存成功?希望有经验的朋友帮帮忙!象银行、邮电那些网络系统是怎么做的?

解决方案 »

  1.   

    步骤1发送成功后,步骤3是否一定能够收到? 
    >>除非你的服务端程序写得有问题
    如果步骤4成功,步骤5失败,客户端该怎么做呢?
    >>重发,记得发起的时候带上业务序号标识,如此服务端检查已经做到了第四步,就直接应答成功。
      

  2.   

    传输协议使用 TCP,保证你传输不会丢失数据;剩下的僵哥答了
      

  3.   


    谢谢你的建议!我看资料,Send成功,不一定就能确保对方收到数据,因为Send仅仅是将发送的数据拷入缓存区,缓存区的数据需要协议发送,因此Send成功不一定能保证对方收到。
      

  4.   


    TCP是可以保证数据传输的,但我的疑问是:几个连续的步骤都成功,或都失败。我相信您理解我的意思。谢谢参与!
      

  5.   

    用UDP也行,同时加上一个GetTickCount标识来比较是否当前发送的数据
    然后设置一下延时的时间,服务器成功后返回这个带GetTickCount标识的信息
    否则重发
      

  6.   

    Client               Server
       |  ———发送数据——>    |
       |  <——收到数据——     |
       |                  处理数据
       |  <——确认处理成功——  |
    你考虑一下一次请求二次确认这种模型。