I am trying to establish a peer to peer communication using UDP hole punching. I am first establishing a connection with the server and then trying to make communication between 2 clients, but I am not able to communicate between 2 computers that are behind 2 different NATs as I am not understanding what IP address and port must I enter for the establishment of communication. Please tell me what changes must I make in the code below so that 2 computers are able to communicate. P.S : External IP doesn't seem to work and I am not supposed to use any additional tool like ngrok Server.py import socket import struct import sys server_listening_port = 12345 sockfd = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sockfd.bind(("", server_listening_port)) print("Listening on the port " + str(server_listening_port)) client_requests = [] while True: data, addr = sockfd.recvfrom(32) client_requests.append(addr) print("Connection from: " + str(addr)) if len(client_requests) == 2: break client_a_ip = client_requests[0][0] client_a_port = client_requests[0][1] client_b_ip = client_requests[1][0] client_b_port = client_requests[1][1] message = ": " sockfd.sendto(str(client_a_ip).encode("utf-8") + message.encode("utf-8") + str(client_a_port).encode("utf-8"), client_requests[1]) sockfd.sendto(str(client_b_ip).encode("utf-8") + message.encode("utf-8") + str(client_b_port).encode("utf-8"), client_requests[0]) sockfd.close() Above is the rendezvous server ClientA.py import socket import struct import sys import time master = ("Server_IP", Port) #Create dgram udp socket try: sockfd = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) message = "Hello" sockfd.bind(('', 0)) sockfd.sendto(message.encode("utf-8"), master) except socket.error: print("Failed to create socket") sys.exit() # #Receiving peer info from server peer_data, addr = sockfd.recvfrom(1024) print (peer_data) print("trying to communicate with peer") peer_ip = peer_data.decode("utf-8").split(":")[0] peer_port = int(peer_data.decode("utf-8").split(":")[1]) peer = (peer_ip, peer_port) while 1: message1 = input(str("You:>>")) message = message.encode("utf-8") sockfd.sendto(str(message).encode("utf-8"), peer) incoming_msg, sendaddr = sockfd.recvfrom(1024) incoming_msg = incoming_msg.decode("utf-8") print("ClientB:>>",incoming_msg) Above code is Client A ClientB.py import socket #For sockets import struct import sys #For exit import time master = ("Server_IP", port) me = ("ClientB_IP", port) #Create dgram udp socket try: sockfd = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) message = "Hello" sockfd.bind(('', 0)) sockfd.sendto(message.encode("utf-8"), master) except socket.error: print("Failed to create socket") sys.exit() # #Receiving peer info from server peer_data, addr = sockfd.recvfrom(1024) print (peer_data) print("trying to communicate with peer") peer_ip = peer_data.decode("utf-8").split(":")[0] peer_port = int(peer_data.decode("utf-8").split(":")[1]) peer = (peer_ip, peer_port) while 1: incoming_msg, sendaddr = sockfd.recvfrom(1024) incoming_msg = incoming_msg.decode("utf-8") print("ClientA:>>", incoming_msg) message = input(str("You :>>")) message = message.encode("utf-8") sockfd.sendto(str(message).encode("utf-8"), peer) Above is client B I am facing problem only in the IP address and port. So , please do help me with it to establish communication between 2 computers behind 2 different NATs Continue reading...