我目前正在开发一个简单的客户端/服务器文件同步。为此,客户端和服务器遵循一种简单的协议来确定发送消息的顺序。
简化的协议(使用Object/ByteArrayStreams):
客户端循环:
1. 发送文件名 2. 发送文件信息 3. 发送数据 4. 等待服务器确认
服务器循环:
1. 读取文件名 2. 读取文件信息 3. 接收数据 4. 向客户端发送确认消息
重复进行上述步骤。
问题在于当传输过程中出现错误时,协议会失序,我通常会收到StreamCorruptedExceptions,因为至少有一方期望得到其他内容。
以下是一个示例问题: 服务器在接收文件(第3个步骤)时出现故障。现在服务器正在等待文件名。由于出现错误,客户端到达第3个步骤并发送了数据。然后抛出异常,因为服务器期望得到一个消息对象,而客户端发送字节数据。
解决这个问题最好的方法是什么?
简化的协议(使用Object/ByteArrayStreams):
客户端循环:
1. 发送文件名 2. 发送文件信息 3. 发送数据 4. 等待服务器确认
服务器循环:
1. 读取文件名 2. 读取文件信息 3. 接收数据 4. 向客户端发送确认消息
重复进行上述步骤。
问题在于当传输过程中出现错误时,协议会失序,我通常会收到StreamCorruptedExceptions,因为至少有一方期望得到其他内容。
以下是一个示例问题: 服务器在接收文件(第3个步骤)时出现故障。现在服务器正在等待文件名。由于出现错误,客户端到达第3个步骤并发送了数据。然后抛出异常,因为服务器期望得到一个消息对象,而客户端发送字节数据。
解决这个问题最好的方法是什么?