Conexão de soquete pela internet em Python?

Eu criei um programa básico de soquete de servidor cliente no Python 2.7.xe ele está funcionando perfeitamente na mesma rede, mesmo em máquinas diferentes, mas quando eu executo servidor e cliente em redes diferentes (servidor na rede do meu amigo enquanto cliente no meu) não retorna nenhum erro e continua esperando. Eu simplesmente não consigo entender como depurar o código. Estou usando a porta 80 matando todos os serviços na porta 80. Também fiz o encaminhamento de porta na porta 80 nas duas máquinas.

Meus códigos são os seguintes:

client.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()                

Às vezes, gera ** Do servidor: ** mas não envia nenhuma mensagem para frente e para trás.

PS: Pesquisei anteriormente no Stack Overflow, mas não consigo encontrar nada relevante.

questionAnswers(3)

yourAnswerToTheQuestion