NewStream error encountered when trying to use libp2p to implement hole punching

34 Views Asked by At

This is the function that reports the error

func (n *Node) sendMessage(id peer.ID, p protocol.ID, data string) bool {
    s, err := n.NewStream(n.Ctx, id, p)
    if err != nil {
        log.Println("NewStream err while sending message: ", err)
        return false
    }
    defer s.Close()

    s.Write([]byte(data))
    return true
}

I call this function as follow(the last line):

        log.Println("start to connect peer node by relay...", nodePeerID, nodeAddr)
    peerID, err := peer.Decode(nodePeerID)
    if err != nil {
        log.Println(err.Error())
        return
    }
    n.Network().(*swarm.Swarm).Backoff().Clear(peerID)

    var address = nodeAddr + "/p2p/" + n.ServerAddrInfo.ID.Pretty() + "/p2p-circuit/p2p/" + peerID.Pretty()
    log.Println("remote address is: ", address)
    chatTargetAddr, err := multiaddr.NewMultiaddr(address)
    if err != nil {
        log.Println("chatTargetAddr is err")
        log.Println(err.Error())
        return
    }

    chatTargetAddrInfo := peer.AddrInfo{
        ID:    peerID,
        Addrs: []multiaddr.Multiaddr{chatTargetAddr},
    }

    if err := n.Connect(n.Ctx, chatTargetAddrInfo); err != nil {
        log.Println("chatTargetAddr connect by relay err")
        log.Println(err.Error())
        return
    }

    log.Println("success to establish connection with remote node by relay!")

    n.chatP2PAddr = &chatTargetAddrInfo
    log.Println("sending FirstP2PMsg to remote node by relay")
    n.sendMessage(chatTargetAddrInfo.ID, FirstP2PMsg, "Hello Im "+chatTargetAddrInfo.ID.Pretty())

FirstP2PMsg is a custom protocol.

When I connect to the relay node, I also call this function, but there was no problem at that time. The only difference matters is the protocol and the peerID.

I suppose that if there is any problem when I use address = nodeAddr + "/p2p/" + n.ServerAddrInfo.ID.Pretty() + "/p2p-circuit/p2p/" + peerID.Pretty() to generate peer ID

I have no idea how to fix it.

0

There are 0 best solutions below