Jump to content
teckV

[Python] Sockets: Cliente / Servidor

Recommended Posts

teckV

Vou agora apresentar um exemplo de manipulação de Sockets para criar uma simples aplicação Cliente / Servidor...

Podem criar qualquer servidor ou cliente sobre esta filosofia bastando enviar os comandos do Protocolo a usar tipo

o IRC ou SMTP para email... podem fazer tudo... analisem o RFC´s respectivos ao protocolo que pretemdem implementar e

mãos à obra...

NOTA:

pagina oficial dos RFC´s - Documentos que standarizam os protocolos Internet

http://www.ietf.org/rfc.html

ou forneçam logo o numero do RFCcomo exemplo uma extensão do SMTP

SMTP Service Extension for

Returning Enhanced Error Codes

http://www.ietf.org/rfc/rfc2034.txt?number=2034

http://www.ietf.org/rfc/rfcNNNN.txt onde NNNN é o numero do RFC pretendido

Para criar uma solução Cliente / Servidor temosobviamenteque criar dois progrmas... o Servidor que fica à escuta de ligações e o Cliente que inicia a ligação.

Criem um ficheiro cliente.py e introduzam o seguinte código:

from socket import *

HOST = '192.168.0.10'
PORT = 8010
BUFSIZ = 1024
ADDR = (HOSTPORT)

tcpCliSock = socket(AF_INETSOCK_STREAM)
tcpCliSock.connect(ADDR)

while 1:
data = raw_input('>')
if not data: break
tcpCliSock.send(data)
data = tcpCliSock.recv(BUFSIZ)
if not data: break
print "ligado a "ADDR" - dados - "data

tcpCliSock.close()

e criem outro ficheiro servidor.py e ponham este código:

from socket import *

HOST = 'localhost'
PORT = 8010
BUFSIZ = 1024
ADDR = (HOSTPORT)

tcpSerSock = socket(AF_INETSOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)

while 1:
print "esperando ligacao"
tcpCliSockaddr = tcpSerSock.accept()
print "ligado a: "addr

while 1:
	data = tcpCliSock.recv(BUFSIZ)
	if not data: break
	tcpCliSock.send("recebendo... > " + data)

tcpCliSock.close()
tcpSerSock.close()

numa linha de comandos do DOS executem o servidor.py para este ficar à escuta de ligações... estou a usar o porto 8010 mas se tiverem um servidor já à escuta nesse porto mudem o porto para outro qualquerafim de evitar conflitos...

c:\servidor.py

noutra janela de DOS ou noutro PC iniciem o cliente.py

no código do programa cliente alterem nesta linha o IP do servidor

HOST = '192.168.0.10'

c:\cliente.py

ficam com um servidor e um cliente... depois de inicializado o cliente escrevam qualquer texto e o mesmo texto vai aparecer na consola do servidor...

giro... é assim que funcionam as aplicações cliente servidor... com imaginação podem criar o vosso proprio protocolo...

tipo...

criem um comando com o nome OLHA e num servidor.py ponham código para caso ele receba o texto OLHA... fixe... o céu é o limite.. ou nãojá se falam em Universos Paralelos e finalmente entendi o conceito... lento mas foi... que é que virá agora?

no exemplo o servidor quando recebe dados ele evia de novo para o cliente acrescentando "recebendo"... para criarem o vosso proprio protocolo substituam esse código por um código de interpretação de comandotipo "caso data=OLHA istocaso data=DESLIGA aquilo" etc....

a variavel data está preenchida com os dados recebidos...

tcpCliSock.send("recebendo... > " + data)

Share this post


Link to post
Share on other sites
vbmaster

Como é que eu executo no DOS o servidor.py ?

Por acaso tenho de ter o ActivePython?

Share this post


Link to post
Share on other sites
teckV

como te foi explicado em cima e da forma que executas todos os scripts Python.. quando istalas o python em windows ele associa os files .py com o interpretador de python e sempre que chamas um file .py o windows/dos envia automaticamente esse file .py para o interpretador de pyhton e executa-o...

c:\servidor.py

Share this post


Link to post
Share on other sites
vbmaster

Pois, mas o interpretador em python é o ActivePython que eu não tenho instalado no pc.... :|

Share this post


Link to post
Share on other sites
vbmaster

thanks... :P

Isto é muito giro.. já tentei aqui no próprio pc...

Era fixe era fazer tipo um msn de consola...:P

Share this post


Link to post
Share on other sites
alexmgarcia

teckV, obrigado, vou começar agora a ver sockets em Python, isso vai ajudar :D

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.