Estrutura Bsica de Programas para Rede
O Python implementa a interface de rede utilizando os fundamentos da API de Socket.
Todo socket pode estar em modo ativo ou passivo.
Quando ele criado ele esta no modo ativo.
Para o servidor poder ficar escutando um porta necessrio colocar o socket do servidor
em modo passivo.
Seqncia no Cliente:
Se foi fornecido um nome de hospedeiro converter em endereo IP;
Se foi fornecido um nome de protocolo de transporte converter em nmero;
Criar o socket (funo socket);
Conecta com o servidor (funo connect);
Enviar/Receber dados (permanecer nesse passo enquanto tiver dados para
enviar/receber);
Fechar o socket.
Seqncia no Servidor:
Se foi fornecido um nome de protocolo de transporte converter em nmero;
Criar o socket (funo socket);
Coloca um endereo local, endereo IP e porta, no socket (funo bind);
Instrui o sistema operacional para colocar o socket em modo passivo (funo listen);
Aceita uma nova conexo (funo accept);
Enviar/Receber dados (permanecer nesse passo enquanto tiver dados para
enviar/receber);
Fechar o socket.
Volta ao passo 5 para aceitar outra conexo.
Os passos 4 e 5 do servidor so feito quando utilizamos protocolo de transporte orientado a
conexo (TCP).
O servidor tipicamente fica em lao infinito aceitando novas conexes.
Enquanto o servidor atende uma conexo ele fica dedicado a ela. Para evitar isso possvel
fazer um passo intermedirio entre o 5 e o 6 para criar um novo processo ou thread para
tratar da nova conexo que esta chegando. Com isso o processo/thread pai fica somente
recebendo as conexes e o processo/thread filho trata das requisies dos clientes.
Cliente e Servidor com UDP
Cliente UDP
Esconder nmero das linhas
1 import socket
2 HOST = '[Link]' # Endereco IP do Servidor
3 PORT = 5000 # Porta que o Servidor esta
4 udp = [Link](socket.AF_INET, socket.SOCK_DGRAM)
5 dest = (HOST, PORT)
6 print 'Para sair use CTRL+X\n'
7 msg = raw_input()
8 while msg <> '\x18':
9 [Link] (msg, dest)
10 msg = raw_input()
11 [Link]()
Servidor UDP
Esconder nmero das linhas
1 import socket
2 HOST = '' # Endereco IP do Servidor
3 PORT = 5000 # Porta que o Servidor esta
4 udp = [Link](socket.AF_INET, socket.SOCK_DGRAM)
5 orig = (HOST, PORT)
6 [Link](orig)
7 while True:
8 msg, cliente = [Link](1024)
9 print cliente, msg
10 [Link]()
Cliente e Servidor com TCP
Cliente TCP
Esconder nmero das linhas
1 import socket
2 HOST = '[Link]' # Endereco IP do Servidor
3 PORT = 5000 # Porta que o Servidor esta
4 tcp = [Link](socket.AF_INET, socket.SOCK_STREAM)
5 dest = (HOST, PORT)
6 [Link](dest)
7 print 'Para sair use CTRL+X\n'
8 msg = raw_input()
9 while msg <> '\x18':
10 [Link] (msg)
11 msg = raw_input()
12 [Link]()
Servidor TCP
Esconder nmero das linhas
1 import socket
2 HOST = '' # Endereco IP do Servidor
3 PORT = 5000 # Porta que o Servidor esta
4 tcp = [Link](socket.AF_INET, socket.SOCK_STREAM)
5 orig = (HOST, PORT)
6 [Link](orig)
7 [Link](1)
8 while True:
9 con, cliente = [Link]()
10 print 'Concetado por', cliente
11 while True:
12 msg = [Link](1024)
13 if not msg: break
14 print cliente, msg
15 print 'Finalizando conexao do cliente', cliente
16 [Link]()
Servidor TCP Concorrente
Esconder nmero das linhas
1 import socket
2 import os
3 import sys
4 HOST = '' # Endereco IP do Servidor
5 PORT = 5000 # Porta que o Servidor esta
6 tcp = [Link](socket.AF_INET, socket.SOCK_STREAM)
7 orig = (HOST, PORT)
8 [Link](orig)
9 [Link](1)
10 while True:
11 con, cliente = [Link]()
12 pid = [Link]()
13 if pid == 0:
14 [Link]()
15 print 'Conectado por', cliente
16 while True:
17 msg = [Link](1024)
18 if not msg: break
19 print cliente, msg
20 print 'Finalizando conexao do cliente', cliente
21 [Link]()
22 [Link](0)
23 else:
24 [Link]()
Usando Thread para Concorrncia
Esconder nmero das linhas
1 import socket
2 import thread
3
4 HOST = '' # Endereco IP do Servidor
5 PORT = 5000 # Porta que o Servidor esta
6
7 def conectado(con, cliente):
8 print 'Conectado por', cliente
9
10 while True:
11 msg = [Link](1024)
12 if not msg: break
13 print cliente, msg
14
15 print 'Finalizando conexao do cliente', cliente
16 [Link]()
17 [Link]()
18
19 tcp = [Link](socket.AF_INET, socket.SOCK_STREAM)
20
21 orig = (HOST, PORT)
22
23 [Link](orig)
24 [Link](1)
25
26 while True:
27 con, cliente = [Link]()
28 thread.start_new_thread(conectado, tuple([con, cliente]))
29
30 [Link]()