Y al final el código de fuente termino siendo esto:
Cliente:
import socket ,os
def Jugada():
while True:
tablero()
f = raw_input("fila : ")
try:
f=int(f)
except ValueError:
tablero()
f = raw_input("fila : ")
if f<=3:
break
while True:
tablero()
c = raw_input("Colmna : ")
try:
c=int(c)
except ValueError:
tablero()
print "fila :",f
c = raw_input("Columna : ")
if c<=3:
break
return 3*(int(f)-1) + (int(c)-1)
def tablero():
os.system("cls")
print " "
print " 1 2 3 "
print " +---+---+---+ "
print "1 | %c | %c | %c | " % (M[0], M[1], M[2])
print " +---+---+---+ "
print "2 | %c | %c | %c | " % (M[3], M[4], M[5])
print " +---+---+---+ "
print "3 | %c | %c | %c | " % (M[6], M[7], M[8])
print " +---+---+---+ "
print " "
M = ['#','#','#','#','#','#','#','#','#']
end=False
#Crear un socket para la conexion con el servidor. Puede dejarlse sin parametros
#o se puede escribir server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s = socket.socket()
#los parametros de metodo connect son el numero IP del servidor y el numero del puerto
s.connect(("localhost", 9999))
s.send("juguemos")
#Creamos un bucle para mantener la conexion
while True:
p=Jugada()
while True:
if M[p]!='X' and M[p]!='O':
break
else:
tablero()
p=Jugada()
M[p] = 'X'
tablero()
s.send(str(p))
while True:
if (M[0]=="X" and M[1]=="X" and M[2]=="X"):
print "\n\nGane"
end=True
break
elif (M[3]=="X" and M[4]=="X" and M[5]=="X"):
print "\nGane"
end=True
break
elif (M[6]=="X" and M[7]=="X" and M[8]=="X"):
print "\nGane"
end=True
break
elif (M[0]=="X" and M[3]=="X" and M[6]=="X"):
print "\nGane"
end=True
break
elif (M[1]=="X" and M[4]=="X" and M[7]=="X"):
print "\nGane"
end=True
break
elif (M[2]=="X" and M[5]=="X" and M[8]=="X"):
print "\nGane"
end=True
break
elif (M[0]=="X" and M[4]=="X" and M[8]=="X"):
print "\nGane"
end=True
break
elif (M[2]=="X" and M[4]=="X" and M[6]=="X"):
print "\nGane"
end=True
break
else:
break
if end==True:
break
p = int(s.recv(2))
print "indice recibido = ", p, "\n"
M[p] = 'O'
while True:
if (M[0]=="O" and M[1]=="O" and M[2]=="O"):
print "\n\nPerdi"
break
elif (M[3]=="O" and M[4]=="O" and M[5]=="O"):
print "\nPerdi"
break
elif (M[6]=="O" and M[7]=="O" and M[8]=="O"):
print "\nPerdi"
break
elif (M[0]=="O" and M[3]=="O" and M[6]=="O"):
print "\nPerdi"
break
elif (M[1]=="O" and M[4]=="O" and M[7]=="O"):
print "\nPerdi"
break
elif (M[2]=="O" and M[5]=="O" and M[8]=="O"):
print "\nPerdi"
break
elif (M[0]=="O" and M[4]=="O" and M[8]=="O"):
print "\nPerdi"
break
elif (M[2]=="O" and M[4]=="O" and M[6]=="O"):
print "\nPerdi"
break
else:
break
print "\nel juego ha terminado"
#s.close()
----------------
Servidor:
import socket
from random import randrange
M = ['#','#','#','#','#','#','#','#','#']
# Crear un socket para que el servidor acepte conexiones de clientes
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# El metodo bind() identifica el puerto de escucha y la IP desde donde el servidor
# aceptara conexiones (dejamos esa IP en blanco para que acepte de cualquiera)
s.bind(("", 9999))
print "\n\nservidor esperando un contendor\n\n"
# el metodo listen() acepta tantas conexiones como el valor que le pasemos (1 en este caso)
s.listen(1)
# Crear un socket para escuchar al cliente. Al aceptar una conexion se obtiene la tupla add
# que contiene IP:puerto que identifica la IP del cliente y su puierto
sc, addr = s.accept()
mensaje = sc.recv(10)
if mensaje=="juguemos":
print "jugando con cliente ", addr[0]
apagar = False
while True:
# El metodo recv recibe tantos bytes como le indiquemos
p = int(sc.recv(2))
print "indice recibido = ", p
if p==9:
break
M[p] = 'X'
while True:
if (M[0]=="X" and M[1]=="X" and M[2]=="X"):
print "\n\nPerdi"
apagar=True
break
elif (M[3]=="X" and M[4]=="X" and M[5]=="X"):
print "\nPerdi"
apagar=True
break
elif (M[6]=="X" and M[7]=="X" and M[8]=="X"):
print "\nPerdi"
apagar=True
break
elif (M[0]=="X" and M[3]=="X" and M[6]=="X"):
print "\nPerdi"
apagar=True
break
elif (M[1]=="X" and M[4]=="X" and M[7]=="X"):
print "\nPerdi"
apagar=True
break
elif (M[2]=="X" and M[5]=="X" and M[8]=="X"):
print "\nPerdi"
apagar=True
break
elif (M[0]=="X" and M[4]=="X" and M[8]=="X"):
print "\nPerdi"
apagar=True
break
elif (M[2]=="X" and M[4]=="X" and M[6]=="X"):
print "\nPerdi"
apagar=True
break
else:
break
if apagar==True:
break
while True:
k = randrange(0, 9)
if M[k] == '#':
M[k] = 'O'
break
print "indice enviado = ", k, "\n"
# El servidor le responde al cliente
sc.send(str(k))
while True:
if (M[0]=="O" and M[1]=="O" and M[2]=="O"):
print "\n\nGane"
apagar=True
break
elif (M[3]=="O" and M[4]=="O" and M[5]=="O"):
print "\nGane"
apagar=True
break
elif (M[6]=="O" and M[7]=="O" and M[8]=="O"):
print "\nGane"
apagar=True
break
elif (M[0]=="O" and M[3]=="O" and M[6]=="O"):
print "\nGane"
apagar=True
break
elif (M[1]=="O" and M[4]=="O" and M[7]=="O"):
print "\nGane"
apagar=True
break
elif (M[2]=="O" and M[5]=="O" and M[8]=="O"):
print "\nGane"
apagar=True
break
elif (M[0]=="O" and M[4]=="O" and M[8]=="O"):
print "\nGane"
apagar=True
break
elif (M[2]=="O" and M[4]=="O" and M[6]=="O"):
print "\nGane"
apagar=True
break
else:
break
if apagar==True:
break
print "\n\nel juego ha terminado"
#Cerramos la instancia del socket cliente y servidor
sc.close()
s.close()
.
Conclusión:
Los sockets brindan la posibilidad de conectarse entre 2 computadores a distancia, Solo con la dirección IP y un puerto de conexión. Esto permite hacer varios tipos de trabajo a distancia, también facilita un montón el envió de información atravesar de los programas.