TCP行为异常;发送和接收数据是不同的

时间:2013-12-05 10:05:45

标签: java tcp

我正在使用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);

0 个答案:

没有答案