我正在使用JAVA在分布式网络上实现距离矢量协议。我将所有节点的跃点值存储在HashTable中并将其传递给邻居节点。我正在检查我的HashTable中存在的密钥数量,然后通过MessageSender(自编写的类)传递它,并且在邻居端收到此HashTable后,我再次检查存在的密钥数量,它出现了1个密钥短。它发生在特定情况下,并非在所有可预测的情况下都发生。你能告诉我这里有什么问题吗? 我也尝试使用ArrayList数据结构代替HashTable。
发送块是:
synchronized(TCPServer.node_list)
{
msg.nodesDetails = TCPServer.node_list;
}
System.out.println("node_list.size "+msg.nodesDetails.size());
synchronized(sender_list)
{
System.out.println("sending node_list contains");
Enumeration<Integer> enumKey = msg.nodesDetails.keys();
while(enumKey.hasMoreElements())
{
Integer key = enumKey.nextElement();
System.out.print(msg.nodesDetails.get(key).nodeNo+","+msg.nodesDetails.get(key).hops+"\t");
}
System.out.println();
for(int i=0 ; i<sender_list.size(); i++)
{
try
{
sender_list.get(i).ooss.writeObject(msg);
System.out.println("Sending TCP msg to "+
sender_list.get(i).receiverNodeNo + " node");
}
catch (IOException e)
{
System.out.println("Send message failed");
e.printStackTrace();
}
}
}
和接收块是:
public void run()
{
while(true)
{
try
{
Message msg = (Message)ois.readObject();
System.out.println("Message received from node "+msg.senderId);
Hashtable<Integer, Node> aai = msg.nodesDetails;
int flag = 0;
System.out.println("msg.nodesDetails.size "+msg.nodesDetails.size()+" of node "+msg.senderId);