How to NAT Punch manually (for android)

This assumes the master server bits are taken care of (the peer host has been notified that the peer client would like to join it). I am using this blog post as my guide so far - NAT Punch-through for Multiplayer Games | Keith Johnston

My peer host needs to send packets to my other peer to open up the router - how specifically would I do that on a game already set to listen to those ports (7777)

I am able to send tcp packets unbound on port 7777 (but it is sent FROM a random port) I assume this is why it is not working. The second I try to bind to a port, the socket fails to construct.