¿Conexión de socket a través de internet en Python?

He creado un programa básico de socket de servidor de cliente en Python 2.7.xy funciona absolutamente bien en la misma red, incluso en diferentes máquinas, pero cuando ejecuto el servidor y el cliente en diferentes redes (servidor en la red de mi amigo mientras cliente en el mío) no devuelve ningún error y sigue esperando. Simplemente no puedo entender cómo depurar el código. Estoy usando el puerto 80 al eliminar todos los servicios en el puerto 80. También he realizado el reenvío de puertos en el puerto 80 en ambas máquinas.

Mis códigos son los siguientes:

cliente.py

import socket              

s = socket.socket()        
host = '103.47.59.130' 
port = 80               

s.connect((host, port))
while True: 
    print "From Server: ", s.recv(1024)  #This gets printed after sometime
    s.send(raw_input("Client please type: "))

s.close()                     

server.py

import socket               

s = socket.socket()         # Create a socket object
host = '192.168.0.104'    #private ip address of machine running fedora
port = 80                
s.bind((host, port))       

s.listen(5)                
c, addr = s.accept()       
print 'Got connection from', addr    #this line never gets printed
while True:
   c.send(raw_input("Server please type: "))
   print "From Client: ", c.recv(1024)

c.close()                

A veces genera ** del servidor: ** pero no envía ningún mensaje de ida y vuelta.

PD: He buscado en Stack Overflow anteriormente, pero no puedo encontrar nada relevante.

Respuestas a la pregunta(3)

Su respuesta a la pregunta