CENTRO UNIVERSITÁRIO DO TRIÂNGULO
INTERNET E REDES DE COMPUTADORES
APLICAÇÕES DE REDES DE COMPUTADORES
TCP/IP
Exemplificando a camada de transporte
através de aplicações cliente / servidor
O conceito cliente / servidor não é restrito a
imagem
que
fazemos
frequentemente
de
computadores que apresentam características
estruturais diferentes, originando uma verdadeira
separação entre os equipamentos que são clientes e
outros que são servidores. O que existe, de fato, são
computadores rodando aplicações clientes e
computadores rodando aplicações servidoras.
Para estabelecer uma relação deste tipo, é preciso
que o servidor seja iniciado e permaneça em loop
(listening) aguardando um pedido de conexão. O
cliente deve conhecer o endereço (número IP) deste
servidor e a porta reservada a aplicação.
A ligação virtual estabelecida entre cliente e
servidor é chamada de socket. Se vários clientes
estão utilizando o mesmo serviço, para cada um
deles existe um socket exclusivo.
Os dois programas que serão apresentados em
seguida, formam um exemplo simples de uma
aplicação servidor (TCP/IP) e vários clientes.
// Programa servidor
import java.net.*;
import java.io.*;
import java.lang.*;
class serv2
{
ConexBasica cb;
public serv2(int port)
{
System.out.println("Servidor listening na porta:
"+port);
cb = new ConexBasica(port);
cb.start();
}
public static void main(String args[])
{
new serv2(4321);
}
Porta do serviço
}
class ConexBasica extends Thread
{
int pt;
ServerSocket ssocket;
Conexsec csec;
public ConexBasica(int port)
{
pt = port;
}
public void run()
{
try
{
ssocket = new ServerSocket(pt);
}
catch(Exception e)
{
System.err.println(e);
System.exit(1);
}
while(true)
{
try
{
Socket clisocket = ssocket.accept();
csec = new Conexsec(clisocket);
csec.start();
}
catch(Exception e)
{
System.err.println(e);
}
}
}
}
class Conexsec extends Thread
{
Socket csk;
PrintStream soutput;
DataInputStream sinput;
public Conexsec(Socket s)
{
csk = s;
}
public void run()
{
System.out.println("Criada conexao:
"+csk.getInetAddress() +":"+csk.getPort());
try
{
soutput = new PrintStream(csk.getOutputStream());
sinput = new
DataInputStream(csk.getInputStream());
while(true)
{
String str = sinput.readLine();
soutput.println("eco do servidor: "+str);
System.out.println(str);
if(str.equals("Bye"))
{
csk.close();
System.out.println("Desconectado:
"+csk.getInetAddress()
+":"+csk.getPort()+".Listening...");
stop();
}
}
CENTRO UNIVERSITÁRIO DO TRIÂNGULO
INTERNET E REDES DE COMPUTADORES
APLICAÇÕES DE REDES DE COMPUTADORES
}
String str = i1.readLine();
coutput.println(str);
String str2 = cinput.readLine();
System.out.println("Recebido do servidor: "+str2);
catch(Exception e)
{
System.err.println(e);
}
}
}
===================================
===================================
// Programa cliente
import java .net.*;
import java.io.*;
import java.lang.*;
class cli2
{
DataInputStream i1;
DataInputStream cinput;
PrintStream coutput;
Socket clisoc;
if(str.equals("Bye"))
{
System.out.println("Desconectado:
"+clisoc.getInetAddress() +":"+clisoc.getPort());
clisoc.close();
System.exit(0);
}
}
}
catch(Exception e)
{
System.err.println(e);
System.exit(1);
}
}
IP do
servidor
public cli2()
{
Porta
try
{
clisoc = new Socket("127.0.0.1", 4321);
cinput = new DataInputStream(clisoc.getInputStream());
coutput = new PrintStream(clisoc.getOutputStream());
i1 = new DataInputStream(System.in);
public static void main(String args[])
{
new cli2();
}
}
while(true)
{
System.out.println("Digite uma palavra: ");
Procedimento Experimental
1) Para que os programas funcionem é preciso inicialmente compilá-los, usando o Java compiler.
Abra uma janela do ms-dos (command) e digite:
javac cli.java
javac serv.java
Obs.: Deverá aparecer uma mensagem (warning) relatando que o método utilizado está depreciado
(deprecated), simplesmente ignore.
2) Para executar os programas, abra 2 janelas ms-dos, uma para o cliente e outra para o servidor
- Janela do servidor (execute este primeiro): java serv
não acrescente a extensão
- Janela do cliente: java cli
3) Os testes são simples, o que for digitado na tela do cliente será ecoado no servidor, até que se digite a
palavra Bye .
4) Verifique de que forma está ocorrendo a interação cliente servidor, anote os endereços, portas e relate
o experimento.
5) Faça alterações no programa para que você estabeleça um chat com seu colega ao lado.
6) Após analisar e anotar os detalhes do experimento, faça um relatório conforme modelo indicado e o
entregue impresso no dia 02/09/2005.
Download

tcpip em java