Jump to content

[Python] Sockets: Cliente / Servidor


teckV
 Share

Recommended Posts

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)
Link to comment
Share on other sites

não vbmaster.. não é assim... o ActivePython é um dos vários interpretadores de python disponiveis e nem é o oficial...

mas também há algo que não entendo... queres correr uma aplicação em python sem teres o intrepertador de python instalado??

descarrega o python daqui e instala-o

http://www.python.org/ftp/python/2.4.3/python-2.4.3.msi

Link to comment
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
 Share

×
×
  • 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.