Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1.Introduo
E muitas outras.
As formas desta comunicao variam muito, desde o uso de interfaces seriais RS232, de rede Ethernet, wireless, etc.
Assim como no mundo dos humanos, a comunicao entre mquinas governada por um protocolo. Um protocolo
uma coleo de acordos, que devem ser observados por todos os envolvidos na comunicao. Veja por exemplo o
que acontece em uma sala de aula: quando um aluno deseja perguntar algo, levanta a mo, solicitando acesso ao
meio fsico, o ar, e a permisso para falar (token). Ao terminar, o token retorna ao professor. De uma forma
simples, um protocolo de comunicao envolve dois tipos de protocolos:
Protocolo fsico, envolvendo a definicao do meio fsico (ar, cabo em par tranado, fibra tica), a sinalizao
(presso acstica, nvel de tenso, intensidade luminosa), a codificao do sinal (banda base, tipo de
modulao), conectores, etc. No caso dos humanos, definiu-se (pelo menos, por enquanto...) que o protocolo
fsico utilizaria o ar como meio fsico, com a sinalizao em banda base utilizando presso acstica. Um dia,
que sabe, estaremos usando ondas telepticas...
Protocolo lgico, envolvendo a definio das mensagens que fluiro entre os participantes da comunicao.
Deve-se ter um acordo sobre o lxico, sinttico e semntico. Por exemplo, no adianta voc falar em Francs
quando seu interlocutor somente compreende Portugus; em outras palavras, apesar do lxico ser o mesmo, o
sinttico e o semntico so diferentes.
Assim, no basta dizer que os sistemas se comunicam atravs da interface serial RS232, como comumente se
escuta. necessrio que o protocolo lgico tambm seja compreendido entre ambas as partes, para que a
comunicao realmente acontea.
O modelo OSI-ISO (Open Systems Interconnection, produzido pela ISO-International Standards Organization)
utilizado como referncia para o projeto e a anlise de protocolos de comunicao. Sua principal caracterstica
dividir as funcionalidades (que ele chama servios) necessrias comunicao em camadas, dividindo assim as
responsabilidades e permitindo que uma certa camada possa ter diferentes implementaes (com diferentes
tecnologias ou fornecedores), mas ainda assim tendo-se a sua compatibilidade.
onde:
Camada Servios
Fsica(1) Transmisso de sequncias de bits sobre meio fsico
Especifica : sinalizao, codificao, conectores e pinagens,
meio fsico, aspectos eletrnicos e mecnicos
Domnio da engenharia eletrnica
No trata de correo de erros na transmisso
O protocolo TCP-IP foi criado nos anos 70, por encomenda do Departamento de Defesa dos Estados Unidos
(ARPA), com o objetivo militar de criao de uma rede em que no fosse necessrio um ponto central de
coordenao, j que este poderia ser atacado em caso de guerra e destrudo todo o sistema de comunicao.
Implementa de forma parcial o modelo OSI-ISO, como mostra a figura:
Pela figura, pode-se perceber que os nveis 1 e 2, responsveis pelo acesso ao meio fsico, podem ser implementados
de vrias formas. Por exemplo, em sua casa, se voc utiliza a acesso discado Internet, tem a linha telefnica como
nivel 1 e o protocolo PPP (Point-To-Point Protocol) como nvel 2.
No nvel IP, cada computador conectado rede mundial possui um endereo nico, denominado endereo IP. Este
formado por 4 bytes (valores de 0 a 255), como 143.107.106.20 e que corresponde a um nome nico (no caso,
www.poli.usp.br).
Duas implementaes esto disponveis no nivel de transporte (nivel 4): os protocolos TCP (Transport Control
Protocol) e UDP (User Datagram Protocol). As principais caractersticas destes protocolos esto listadas a seguir:
Protocolo Caractersticas
UDP Oferece servios de entrega de datagramas (pacotes)
No cuida do sequenciamento de pacotes
Estaria entre a camada 3 e 4, pois no implementa sequenciamento
de pacotes
No implementa checagem e correo de erros (no confivel)
Utilizado eficientemente em redes locais, que j possuem mecanismos
de checagem de erros em nvel mais baixo
O modelo OSI-ISO no define precisamente as interfaces entre as camadas, mas apenas os servios a serem
prestados por cada uma. A interface entre a camada de Aplicao e a de Transporte foi definida, de forma
independente, pela Universidade da Califrnia em Berkeley, que projetou a interface chamada Sockets e pela AT&T,
que definiu o padro TLI (Transport Layer Interface). A indstria adotou Sockets como padro de fato.
3.1.Computao client-server
Na computao client-server, tem-se um processo Client (cliente) que requisita um servio (ou funcionalidade)
oferecido pelo processo Server (servidor). Client e Server podem estar no mesmo computador ou em computadores
distintos. Assim, por exemplo, quando o seu navegador de Internet (browser) requisita uma pgina
(http://www.poli.usp.br/mecatronica.html) est fazendo o papel de Client e o webserver, de Server. O servio
envolvido , justamente, o fornecimento da pgina web.
Um socket um ponto de conexo entre a camada de Aplicao e a de Transporte (TCP ou UDP). Neste texto,
apenas a interface TCP ser discutida, por sua mais larga aplicabilidade.
Do lado Server, definiu-se que a camada TCP teria 216 1 pontos de conexo, permitindo portanto que at cerca de
32000 diferentes Aplicaes possam ser implementadas na mesma mquina. Este ponto de conexo denominado
port (em Portugus, usa-se port ou porta). Cada Aplicao escuta[1] um socket, esperando por uma conexo e as
requisies dos diversos Clients. Uma mesma Aplicao pode ter, dependendo de como implementada, muitos
Clients simultaneamente.
J o Client, para iniciar uma comunicao com o Server, deve inicialmente abrir uma conexo (lembre-se que o
protocolo TCP orientado a conexo) e, a partir da, pode enviar mltiplas requisies ao Server e deste, receber
respostas. Enquanto a conexo estiver ativa, tem-se uma comunicao bi-direcional entre Client e Server.
3.3.Sockets em Java
A linguagem Java possui uma bibliteca de funes no pacote java.net, voltada comunicao por sockets.
java.net.ServerSocket representa a viso da comunicao do lado Server. Os seus principais mtodos so:
java.net.Socket representa uma conexo entre client e server. Seus principais mtodos so:
Para enviar ou receber informaes, utilizam-se as classes InputStream e OutputStream. Entretanto, devido
possibilidade de atrasos, normalmente so utilizadas as classes BufferedInputStream e BufferedOutputStream, que
fornecem um buffer (rea de armazenamento temporrio) que evita as perdas de caracteres por over run (quando
a sada est lenta e perde-se um caracter, escrevendo um novo caracter sobre outro que ainda no foi enviado) ou
under run (idem, na leitura). Estas classes pertencem ao pacote java.io. Estas classes so utilizadas em todas as
situaes de entrada e sada de dados, como as relacionadas com arquivos, teclado, etc.
BufferedInputStream(InputStream in)
Construtor. Exige como parmetro um InputStream; neste caso, ser exatamente o retorno de
Socket.getInputStream()
java.io.BufferedOutputStream representa um stream de escrita ou sada de dados. Seus principais mtodos so:
BufferedOutputStream(OutputStream out)
Construtor. Exige como parmetro um OutputStream; neste caso, ser exatamente o retorno de
Socket.getOutputStream()
4.Parte Experimental
4.1.Comunicao Client-Server
Considere o programa do Anexo 1. Analise-o, verificando que contm a parte Client e Server, reunidas em um nico
arquivo por simplicidade didtica, encerradas nas classes SimpleClient e SimpleServer, respectivamente.
Atividades:
a.Compile o programa
b.Abra duas janelas DOS, executando em uma o server:
c:\> java SimpleServer
e, na outra, o client:
c:\>java SimpleClient
c:\>netstat nr
Altere a constante HOST na classe SimpleClient, compile e execute novamente o client. Provavelmente no
funcionar, por causa do over-run. Assim, voc precisar alterar o seu Client, para utilizar o
BufferedOutputStream. No se esquea do flush() para enviar realmente os dados! Ficar algo como:
Socket s = new Socket(HOST, PORT);
BufferedOutputStream bos = new BufferedOutputStream(s.getOutputStream());
int i = 0;
while (i < 128) {
bos.write(i++);
} // while
bos.flush();
Perceba que agora os dados no so mais enviados ao seu Server mas ao Server de seu colega!
d.Altere o programa, para que o Server adicione 100 a cada valor recebido e o envie de volta ao Client, que deve
tambm ser capaz de ler as respostas enviadas pelo Server e imprim-las.
A base da Internet so os servidores Web, capazes de enviar uma pgina HTML (Hyper Text Markup Language) ao
seu navegador (browser).
O protocolo da camada de aplicao (ou seja, entre o webserver e o browser) conhecido como HTTP (Hyper Text
Transport Protocol). Quando voc digita em seu navegador uma requisio de acesso, como
http://www.poli.usp.br/mecatronica.html
o seu browser : (1)abre um socket para www.poli.usp.br e (2) envia uma string contendo
GET ./mecatronica.html HTTP/1.1 \n\n onde \n corresponde sequncia de caracteres ASCII 0x0D 0x0A ou CR
LF.
O webserver, recebendo esta requisio, obtm o nome do arquivo (no caso mecatronica.html) e l de seu disco
local este arquivo, enviando-o ao browser. Este arquivo deve estar formatado como uma pgina HTML.
Veja o programa do Anexo 2, que uma implementao simples (mas funcional!) de um WebServer. Analise-o,
notando que:
Um ServerSocket criado, indicando que a aplicao deseja escutar a porta SERVER_SOCKET (no caso,
2001).
Ao receber uma conexo, cria uma instncia de HttpResponder, cujo mtodo HttpResponder.processRequests()
responsvel por :
Ler os caracteres enviados pelo browser (HttpResponder.getRequest())
Obter, da requisio recebida, o nome do arquivo HTML desejado (HttpResponder.getFileName())
Ler o arquivo e enviar, via socket, os seu contedo (HttpResponder.sendFile())
Atividades
a.Crie, no diretrio onde se encontra o programa SimpleWebServer.java, um arquivo HTML (chame-o, por exemplo,
pagina.html) como por exemplo:
<html>
<body>pagina inicial
</body>
</html>
b.Modifique, no SimpleWebServer.java, a linha que indica onde esto as pginas HTML, modificando a linha onde
se define a varivel BASE_DIR. No se esquea de manter as barras normais (e no invertidas, como normal em
MS Windows) e colocar uma barra no final. Compile e execute o SimpleWebServer
http://localhost:2001/pagina.html
Observe que foi designada a porta 2001, j que esta a porta que o nosso SimpleWebServer est configurado para
escutar.
d.Agora, digite no seu navegador uma linha semelhante, substituindo localhost pelo endereo IP da mquina de
algum de seus colegas. Verifique que voc capaz de ver a pgina que ele est disponibilizando. assim que
funciona a Internet!
Referncias
[Comer, 1994] Comer, D.E.; Stevens, D.L. Internetworking with TCP/IP. Prentice Hall, 1994.
class SimpleServer {
class SimpleClient {
} // SimpleServer
class HttpResponder {
Socket m_Socket = null;
static String BASE_DIR=c:/mecatronica/
HttpResponder(Socket s) {
m_Socket = s;
} //HttpResponder
void processRequests() {
try {
String request = getRequest();
System.out.println(request);
String file = getFileName(request);
System.out.println(file);
sendFile(file);
} catch (Exception e) { e.printStackTrace(); }
} // processRequests
[1] A expresso escutar um socket uma traduo literal do Ingls (to listen to a socket) e utilizada no meio tcnico.