Acabo de hacer esto como para un ejemplo...
Es un server sincronico q acepta de a 1 conexion
import socket
s = socket.socket()#iniciamos el socket q va a escuchar
s.bind(('127.0.0.1',9999))
s.listen(2)#empezamos a escuchar
totalData = "Welcom to the super server!\n"
while True:
sc, addr = s.accept() #accept() devuelve una tupla sc (q es el socket del cliente) addr q es una tupla ("IP", puerto)
ip,p = addr
print "From : " + ip
data = "" + sc.recv(1024) + "\n" #leemos lo q nos manda el cliente
totalData += data
sc.send(totalData) #y le respondemos
sc.close()#cerramos la conexion... y el ciclo vuelve a empezar...
Este server sirve para atender de a 1 conexion a la vez... Para tratar con varias podes ir usando Select, Threads.. etc..
Cliente:
import socket
TotalData = ""
while True:
s = socket.socket() #inicializamos el socket
data = raw_input("<<")
s.connect(("127.0.0.1",9999)) #lo conectamos al mismo puerto donde el server escucha
s.send(data) #mandamos cosas
TotalData = "" + s.recv(1024*4) #recivimos cosas
print TotalData #mostramos la cosa
s.close() #cerramos la cosa de la cosa (?) cerramos el socket
del s
Repito... no busca ni prolijidad ni nada esto... es para q veas masomenos un ejemplo... si buscas bien debe haber en este foro... y en internet varios ejemplos de todo tipo...