各位好!
一个基于Internet的收费软件,c/s结构,基于Socket编程,一笔收费业务的处理流程如下:
1、客户端发送收费信息,可能成功、也可能失败
2、客户端等待服务端回应
3、服务端收到收费信息
4、服务端将收费信息写到数据库,可能成功、也可能失败
5、服务断回应客户端数据是否保存成功,可能成功、也可能失败我能够确定的部分:
在步骤1如果失败,客户端确定这笔业务失败,重新处理
如果步骤4失败,步骤5成功,客户端确定这笔业务失败,重新处理我不能确定的部分:
步骤1发送成功后,步骤3是否一定能够收到?如果步骤4成功,步骤5失败,客户端该怎么做呢?
其实我的问题就一个:如何能确保客户端总是得到服务端数据是否保存成功?希望有经验的朋友帮帮忙!象银行、邮电那些网络系统是怎么做的?
一个基于Internet的收费软件,c/s结构,基于Socket编程,一笔收费业务的处理流程如下:
1、客户端发送收费信息,可能成功、也可能失败
2、客户端等待服务端回应
3、服务端收到收费信息
4、服务端将收费信息写到数据库,可能成功、也可能失败
5、服务断回应客户端数据是否保存成功,可能成功、也可能失败我能够确定的部分:
在步骤1如果失败,客户端确定这笔业务失败,重新处理
如果步骤4失败,步骤5成功,客户端确定这笔业务失败,重新处理我不能确定的部分:
步骤1发送成功后,步骤3是否一定能够收到?如果步骤4成功,步骤5失败,客户端该怎么做呢?
其实我的问题就一个:如何能确保客户端总是得到服务端数据是否保存成功?希望有经验的朋友帮帮忙!象银行、邮电那些网络系统是怎么做的?
>>除非你的服务端程序写得有问题
如果步骤4成功,步骤5失败,客户端该怎么做呢?
>>重发,记得发起的时候带上业务序号标识,如此服务端检查已经做到了第四步,就直接应答成功。
谢谢你的建议!我看资料,Send成功,不一定就能确保对方收到数据,因为Send仅仅是将发送的数据拷入缓存区,缓存区的数据需要协议发送,因此Send成功不一定能保证对方收到。
TCP是可以保证数据传输的,但我的疑问是:几个连续的步骤都成功,或都失败。我相信您理解我的意思。谢谢参与!
然后设置一下延时的时间,服务器成功后返回这个带GetTickCount标识的信息
否则重发
| ———发送数据——> |
| <——收到数据—— |
| 处理数据
| <——确认处理成功—— |
你考虑一下一次请求二次确认这种模型。