我有用 C# 编写的 TCP 服务器和客户端。由于我的连接是通过不可靠的 wifi 进行的,因此我使用重新发送相同的数据包并处理数据包丢失。
例如银行账户平台。用户存款,客户端发送此消息给服务器,如果服务器收到此消息,则回复客户端操作成功。如果客户端没有收到回复,它会在一段时间后再次发送。
这看起来很简单,但是当 wifi 卡住并且客户端没有收到回复并继续向服务器发送相同的消息时,我遇到了这种情况。最终这些消息同时被服务器接收。结果,服务器认为用户存了 100 次钱。
我想知道人们通常如何处理 tcp 服务器客户端程序的这种情况,特别是当应用程序不仅仅是聊天应用程序,而是更敏感的信息(如金钱)时。我的第一个想法是在消息中添加一个事务 ID,这样服务器就不会处理具有相同事务 ID 的消息,这将防止上述情况。但不确定是否有更好的解决方案或.Net 对此有一些内部功能。
谢谢你。