Can the two networks communicate with each other internally? If so, simply send data between each machine. If not, then you will need a central server to relay the chat. This won't be peer-peer though like you asked.
You need to answer my previous question before I can suggest anything else.
NAT sounds like you have two networks with a router in between (so are on seperate networks completely)
If they are hidden behind a router, I'm not sure using RAW packets to the MAC address will work, as you only have the external facing MAC to address. Using NAT is is possible though. You need to look up UPnP; this way you can configure router port forwarding dynamically.
I am working creating a fully encapsulated, homogeneous singly linked data structure. The Listing class and SinglyLinkedList class that are part of the whole application compile fine, but the problem ...