大家帮小弟我讨论一下小弟我的一个p2p打洞算法吧,小弟我真不知道该怎么处理了

大家帮我讨论一下我的一个p2p打洞算法吧,我真不知道该怎么办了
我要实现的是一个p2p,UDP聊天的程序,是这样的,我在客户端记录一个列表A,里面存放有各用户的信息(包括其ip,prot当然,这是它连接到服务器的信息),我直接向这个地址发送信息,它肯定是收不到的(NAT)的原因.之后我又增加了一个列表B,又来存放已经与本地用户建立P2P连接的用户的信息,每一次更新在线用户状态时,都会去更新这个列表.
发送消息时是这样的:
    先在列表B中判断对方是否存在
    if(不存在)
    {
          需要向对方打洞,并发送打洞消息
          while(等待次数   >   0)
          {
                if(收到打洞消息)
                      break;
          }
          if(没有收到打洞成功的消息)
                对方拒绝接收数据,不发送给对方
    }
    else
    {
          利用列有B中的IP信息更新当前用户的IP信息,并发送给对方
    }

这个算法看上去好像没有什么大问题,一开始时是双方是可以聊天的,而且也可以收到消息,但是一段时间没有聊后,消息就发不出去了。。怎么办呀?急需解决,等待中................

------解决方案--------------------
NAT是有时间限制的,所以要隔一段时间,测试P2P连接还在不在。
------解决方案--------------------
10秒发一个keepalive包