我目前正在致力于一个简单的客户机/服务器文件同步。为此,客户端和服务器遵循简单的协议,该协议确定发送消息的顺序。Java文件同步期间的网络错误
缩短协议(使用对象/ ByteArrayStreams):
客户循环:
- 发送文件名
- 发送的FileInfo
- 发送数据
- 等待服务器确认
服务器环路:
- 读取文件名
- 读Fileinfo的
- 接收数据
- 发送确认客户
重复。
问题是协议在传输过程中发生错误和我通常得到StreamCorruptedExceptions
,因为至少有一方期待别的东西。
下面是一个问题的示例情况: 服务器在文件接收过程中出现故障(3),无论出于何种原因。现在服务器等待文件名。由于错误,客户端到达第3部分发送数据。然后抛出异常,因为服务器需要一个消息对象并且客户端发送字节数据。
解决此问题的最佳方法是什么?
您使用的是基于TCP的协议吗?你可以通过直接交换消息来重现这个错误吗?你有没有编写任何自定义的Externalizable实现? – cutchin 2012-02-21 01:57:52
也许我用'协议'这个词来表达自己的错误。它只是发送消息,如文件名,数据使用Java(对象)流,然后确认消息。我在测试条件下没有遇到这个错误,但可以在使用过程中重现它。 – b1nh 2012-02-21 02:03:57
从例外情况来看,它听起来像是在像UDP这样的“尽力而为”协议中使用ObjectInputStream和ObjectOutputStream。是这样吗? – 2012-02-21 02:05:17