1

我在我的服务器上使用 ServerSocket 和使用 ObjectIOStreams 通过网络连接发送可序列化对象的套接字。我正在开发一个本质上更具金融性的垄断版本,因此需要发送和确认发送/接收的数据包。我是否需要实现自己的丢包观察器,还是已经使用(服务器)套接字处理了?

我主要是询问在网络故障或诸如此类的情况下丢失数据包,而不是完全连接错误。例如,兄弟姐妹在我的路由器和计算机的 wi-fi 适配器之间移动一个引线板。

http://code.google.com/p/inequity/source/browse/#svn/trunk/src/network 代码可以在network->ClientController和network->Server下找到

4

1 回答 1

4

理论上;是的。没有办法 100% 理论上保证在硬件层发送的内容在接收端以相同的方式接收。

然而,实际上,如果你使用 TCP(传输控制协议),这些东西已经被处理好了;你不会丢失任何数据包。(另一方面,如果您使用的是 UDP(用户数据报协议),那就另当别论了,很可能是您丢失了数据包,或者无序接收数据包)。

只是简单地查看了您的代码,看来您正在使用多个线程。如果是这样,您必须非常小心同步。很有可能看起来一个数据包已被丢弃,但由于程序中的竞争条件,它根本没有被处理。(请记住,例如 gui,在它自己的线程中运行。)

我认为解决同步问题的最佳方法是将网络循环置于一个非常小的读取/放置同步队列循环中,并在您确定没有其他线程会时从队列中提取接收到的数据包干预。

于 2010-04-27T06:55:42.447 回答