0% encontró este documento útil (0 votos)
448 vistas5 páginas

Socket en Python

Este documento introduce los sockets en Python y explica cómo crear sockets de cliente y servidor, comunicarse a través de sockets, y manejar errores. Los sockets permiten la comunicación entre procesos y máquinas a través de llamadas al sistema operativo. El documento también incluye código de ejemplo de un cliente y servidor TCP y UDP escritos en Python.
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
448 vistas5 páginas

Socket en Python

Este documento introduce los sockets en Python y explica cómo crear sockets de cliente y servidor, comunicarse a través de sockets, y manejar errores. Los sockets permiten la comunicación entre procesos y máquinas a través de llamadas al sistema operativo. El documento también incluye código de ejemplo de un cliente y servidor TCP y UDP escritos en Python.
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 5

socketsenpython

Introduccionalossockets
Programarenredconpythonpuedecaeren2categorias,usarunmodulodeprotocolooprogramar
elprotocolodesdecero.
Lossocketssonunaextensiondelsistemadeentrada/salidadelsistemaoperativoquepermitela
comunicacionentreprocesosymaquinas.
Unsocketpermiteusarllamadasdelsistemaoperativoparahablarconotrasmaquinay/oprocesos
sobrelamaquinaqueloshallamado.
Algunasllamadasalsistemaen*nixquefuncionancondescriptoresdeficheronincluyenaopen(),
read(),write(),close().Undescriptordeficherotipicamenterefiereaunficheroounaentidadde
tipofichero;puedenser,directorios,bloques,socket,FIFO's.
Pythonproveeunainterfacedesocketdelsistemaoperativo,elmodulosocket,siesquesepiensa
disearelprotocolodesdecero.
Creacindeunsocket
Lacreacindeunsocketesdiferentedeunclienteaunserver.
Creacindeuncliente
Primero,setienequecrearelobjetosocket,luegoseletienequedefinirlafamiliadelprotocolo
(comosertransmitidaladata),yeltipodesocket(protocolousadoparatransmitirladata).
Familiasdeprocolo:socket.AF_UNIX,socket.AF_INET,socket.AF_INET6
Tipodesocket:socket.SOCK_STREAM,socket.SOCK_DGRAM,socket.SOCK_RAW,
socket.SOCK_RDM,socket.SOCK_SEQPACKET
Segundo,hayqueconectarelobjetosocketalservidorremoto.Elmtodoconnect()enviaunatupla
conteniendoelhostremoto|direccinIPyelpuertoremoto.
host="www.example.com"
port=80
#Creaciondelobjetosocket
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#Conectandolohaciaunhostremoto
s.connect(host,port)
Creacindeunserver
Lacreacindeunserveresparecidoaldeuncliente.Primerosetienequecrearelobjetosocket,
luegoaadirlasopcionesdesocketsetsockopt();adems,setienequeasociarunpuertoauna
interfacederedyponerloaescucharporconexiones.Finalmente,seaceptanlasconexiondelos
clientesusandosocket.accept()enunaiteracininfinitahastaqueelprogramatermineolevanteuna
excepcin.Losserversusanlamismainterfacesocketquelosclientes.
host=''
port=9876
#Creaciondelobjetosockets=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#Definirlasopcionesdelsocket
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
#Asociarloaunpuerto+interface
s.bind(host,port)
#Ponerloaescucharporconexioness.listen(3)

Comunicandoconsockets
Pythonprovee2manerasparaenviardataatravsdelared:objetosdesocket,yobjetostipofichero
usandosocket.makefile().
Losobjetosdesocketseusancuandohayunanecesidaddecontrolareltamao,lostiempode
espera,ualgunotrodetalledeladataqueestasiendoescritaoleida.
Losobjetosdeficherosonmejoressisetrabajaconprotocolosorientadosaconexinyaquepueden
manejarelanlisissintcticodeladatarecibidaquehasidogarantizadaporelprotocolo.
Erroresenlatransmisinpuedenocurrirporvariosfactorestalescomo,ladesconexindeun
servidor,errordedireccionamiento,etc.Porellopythondefine4posiblesexcepciones:
socket.errorparaproblemasgeneralesdeentrada/salida
socket.gaierrorparaerrordebsquedadeinformacindedireccionamiento.
socket.herrorparaerroresdedireccionamientoparafuncionesqueusanh_errnoenC.
socket.timeoutparamanejartiempodeesperadespusdehaberllamadosettimeout()sobreun
socket.
Loserroresconlosobjetostipoficherosenrealidadhacenunallamadaalsocketdelsistema,asique
seaplicanlosmismoserroresquelosobjetosdesocket.Tambinsedebeevitarelbloqueomutuo
entreelemisoryelreceptor,porellohayqueasegurarenvio/recibodedataconsocket.shutdown()
antesderecibir/enviarnuevadata.
Sobretiemposdeesperaparadetectarymanejarerroresesutilizandotimeouts,conestosepuede
conseguirquepythondetecteinactividadenelsistemacuandohaycomunicacinentreelclientey
elservidor.Parahabilitartimeouts,llamamosasocket.settimeout()enviandoeltiempolimiteen
segundos,luegosiexisteunproblemadetiempodeesperasellamarsocket.timeoutcomo
excepcin.
Tambinsepuedenrealizartransmisionesdeunsolosentidousandollamadasasocket.shutdown(),
conestologramossocketsdeunasolavia(halfopensockets).Estoestilsiserequiereasegurar
quetodaladataescritahasidotransmitida,opreveerdeadlocksenunacomunicacin.Alfinalizar
elllamadoashutdownyasegurarquetodaladatahasidotransmitidaenesavia,elsocketnopodr
serusadonuevamente.
Lallamadaasocket.shutdown()requiereunargumentoparaindicarelmododefuncionamientoo
mododebloqueo.
0previenelecturas
1previeneescrituras
2previenelecturasyescrituras

CODIGODEEJEMPLO:
Elsiguienteejemploloherealizadoorientadoaconexinysinconexin,enamboselservidor
recibecomoparmetrounficherodelarbol*nixparaserlistadoyenviadoalcliente;paraejecutar
elficheroseranecesario2consolasabiertasoelservidorcorriendoen2doplano.
#./[script][fichero]
#./serverTCP.py
#./clienteTCP.py/etc/
Clientesconpython
ClienteTCP
#!/usr/bin/python
#Clienteobjetosocket
importsocket,sys
host="127.0.0.1"
port=10101
filename=sys.argv[1]
#Creaciondelobjetosocket(IPv4,TCP)
try:
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
exceptsocket.error,e:
print"Errorcreandoelsocket:%s"%e
#Conectandolohaciaunhostremoto
try:
s.connect((host,port))
exceptsocket.gaierror,e:
print"Errorconectandoalservidor%s"%e
try:
s.sendall(filename)
exceptsocket.error,e:
print"Errorenviandodatos:%s"%e
while1:
try:
buf=s.recv(2048)
exceptsocket.error,e:
print"Errorreciviendodatos:%s"%e
ifnotlen(buf):
break
sys.stdout.write(buf)
ClienteUDP
#!/usr/bin/python
importsocket,sys
host="127.0.0.1"
port=10101
message=sys.argv[1]
try:
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
exceptsocket.error,e:

print"Errorcreandoelsocket:%s:"%e
try:
s.sendto(message,(host,port))
exceptsocket.error,e:
print"Errorenviandodatos:%s"%e
s.settimeout(5)
while1:
try:
message,address=s.recvfrom(2048)
exceptsocket.timeout:
print"Cerradoporinactividad"
sys.exit(1)
exceptsocket.error,e:
print"Errorrecibiendodatos:%s"%e
ifnotlen(message):
break
sys.stdout.write(message+"\n")

Serversconpython
ServerTCP
#!/usr/bin/python
importsocket,pickle,os
host=""
port=10101
#Creaciondelobjetosocket(IPv4,TCP)
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#Definirlasopcionesdelsocket
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
#Asociarloaunpuerto+interface
s.bind((host,port))
#Ponerloaescucharporconexiones
s.listen(3)
print"Corriendosobrepuerto%d;CtrlCparainterrumpir"%port
while1:
try:
csock,caddr=s.accept()
exceptKeyboadInterrupt:
raise
except:
traceback.print_exc()
continue
#Manejandolaconexion
try:
print"Clienteconectado",csock.getpeername()
exceptKeyboadInterrupt:
raise
except:

traceback.print_exc()
while1:
try:
data=csock.recv(2048)
ifnotlen(data):
break
dir=os.listdir(data)
fordirindir:
csock.sendall(dir+"\n")
csock.shutdown(1)
exceptKeyboadInterrupt:
raise
except:
traceback.print_exc()
csock.close()

ServerUDP
#!/usr/bin/python
#ServerUDP.py
importsocket,os
host=""
port=10101
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
s.bind((host,port))
print"Corriendosobrepuerto%d;CtrlCparainterrumpir"%port
while1:
try:
message,address=s.recvfrom(2048)
print"Gotdatafrom",address
dir=os.listdir(message)
forlistdirindir:
s.sendto(listdir,address)
exceptKeyboardInterrupt:
raise
except:
traceback.print_exc()

También podría gustarte

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy