infra-estrutura de comunicação (if678)
Post on 06-Jan-2016
24 Views
Preview:
DESCRIPTION
TRANSCRIPT
Infra-Estrutura de Comunicação(IF678)
Aula Prática 02 Programação de Sockets TCP e UDP
CIn/UFPE
Bruno Gentilini
Eduardo Souza
Amora Albuquerque
Anália Lima
Cleivson Siqueira
Ivan França
Nosso objetivo:
Revisão rápida sobre Socket Programação de Sockets TCP e UDP Desenvolver um servidor Web
2
AgendaAgenda
3
1. Comunicação entre processos2. Programação de Socket TCP3. Programação de Socket UDP4. Desenvolver um servidor Web...
Comunicação entre processosComunicação entre processos
4
Processos em hosts distintos comunicam-se por meio de envio de mensagens... enviadas e recebidas através de seu socket
Socket é a interface entre a camada de aplicação e a de transporte
Programação de Socket TCP - ClientProgramação de Socket TCP - Client
5
import java.io.*;import java.net.*;import java.util.Scanner;
public class TCPclient {
public static void main(String[] args) throws Exception { //lendo do tecladoString inFromUser = new Scanner(System.in).next();//criando um socket TCPSocket sock = new Socket("localhost", 2000); //stream de saidaDataOutputStream socketOut = new DataOutputStream(sock.getOutputStream());socketOut.writeBytes(inFromUser + '\n');
//resposta do servidorBufferedReader socketIn = new BufferedReader(new InputStreamReader(sock.getInputStream()));System.out.println(socketIn.readLine());
}}
Programação de Socket TCP - Programação de Socket TCP - ServerServer
import java.io.*;import java.net.*;
public class TCPserver {
public static void main(String argv[]) throws Exception {String inFromClient;String outToClient;//socket de "boas vindas"ServerSocket welcomeSocket = new ServerSocket(2000);
while(true) {//socket de conexão TCPSocket sock = welcomeSocket.accept();
//buffer de entrada, que recebe um streamBufferedReader socketIn = new BufferedReader(new
InputStreamReader(sock.getInputStream()));inFromClient = socketIn.readLine();outToClient = inFromClient.toUpperCase() + '\n';//stream de saidaDataOutputStream socketOut = new DataOutputStream(sock.getOutputStream());//stream de
saida//escrevendo no socketsocketOut.writeBytes(outToClient);sock.close();}
}} 6
Exercício
Faça um “Hello [endereço IP do servidor]” e retorne do servidor um “HELLO [endereço IP do cliente]”
OBS: O cliente deve fechar a conexão após receber a resposta do servidor ou dar um timeout de 30 segundos.
Programação de Socket UDP - Programação de Socket UDP - ClientClient
import java.net.*;import java.util.Scanner;
class UDPclient {
public static void main(String args[]) throws Exception {String inFromUser = new Scanner(System.in).next() + '\n'; //entrada do usuárioDatagramSocket clientSocket = new DatagramSocket(); //socket UDPInetAddress IPServer = InetAddress.getByName("localhost"); //IP do servidor
byte[] sendData = new byte[1024]; //dados a serem enviadossendData = inFromUser.getBytes();//criando o pacote de envioDatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length,
IPServer, 5000);clientSocket.send(sendPacket);
byte[] receiveData = new byte[1024]; //dados recebidosDatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket); //recebendo o pacote String inFromServer = new String(receivePacket.getData());System.out.println("FROM SERVER: " + inFromServer);clientSocket.close();
} }
8
Programação de Socket UDP - Programação de Socket UDP - ServerServer
import java.net.*;
class UDPserver {
public static void main(String args[]) throws Exception {
DatagramSocket serverSocket = new DatagramSocket(5000);
byte[] receiveData = new byte[1024] , sendData = new byte[1024];
String inFromClient, outToClient;
InetAddress clientIP; int port;
while(true) {
//pacote a ser recebido
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket); //recebendo o pacotes
inFromClient = new String(receivePacket.getData()); //colocando na string os dados recebidos
clientIP = receivePacket.getAddress(); //pegando o IP e porta do pacote que chegou
port = receivePacket.getPort();
outToClient = inFromClient.toUpperCase();
sendData = outToClient.getBytes();
//enviando pacote de resposta
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, clientIP, port);
serverSocket.send(sendPacket);
}
}
} 9
Exercício
Faça, por meio de uma conexão UDP, o cliente enviar dois números e o servidor responder com a soma deles.
OBS: O cliente deve encerrar após receber a resposta do servidor ou dar um timeout de 30 segundos.
10
Trata-se de um servidor Web, que responderá a requisições HTTP, bastante simples. Com as seguintes regras:
Deve ser implementado utilizando-se a API de Java Ele deve manipular apenas uma requisição HTTP; Ele deve enviar uma mensagem de resposta ao cliente
contendo linhas de cabeçalho e o objeto desejado, se existente;
A única verificação necessária é quando o objeto não for encontrado, deve-se retornar: “HTTP/1.0 404 Not Found”
Teste seu servidor utilizando um navegador qualquer! Mantenha os arquivos que serão baixados na mesma pasta
do seu projeto
Dicas: - utilize as classes ServerSocket, Socket, StringTokenizer e File
- reveja a aula sobre HTTP - consulte o RFC[2616]
- baixar código parcial em www.cin.ufpe.br/~bgda/comunicacao no link [Aulas]
Desenvolver um servidor Desenvolver um servidor Web...Web...
11
12
Exemplo – O que deve ser feitoExemplo – O que deve ser feito
Requisição (via browser ou telnet)
telnet:GET /index.html HTTP/1.0Host: localhost
Browser:http://ip:porta
Resposta (seu servidor)
HTTP/1.0 200 OKContent-Language: pt-BRContent-Length: 53Content-Type: text/htmlConnection: closeCRLF “enter”dados...
Requisição (via browser ou telnet)
telnet:GET /img2.png HTTP/1.0Host: localhost
Browser:http://ip:porta
Resposta (seu servidor)
HTTP/1.0 200 OKContent-Language: pt-BRContent-Length: 733Content-Type: image/pngConnection: closeCRLF “enter”dados...
Exercício do TemporizadorExercício do TemporizadorO exercício deverá ser apresentado
(pessoalmente) aos monitores.A data máxima para apresentar será
definida
Obs: Não mandar emails individualmente para um monitor, pois a dúvida de um pode ser a dúvida de muitos
13
Exercício do Exercício do Temporizador(cont.)Temporizador(cont.) Deverá ser desenvolvido um programa que rode em duas máquinas
distintas. O programa terá as seguintes funcionalidades:
1. Os dois hosts (A e B) devem estabelecer uma conexão TCP
2. O host A deve enviar ao host B um pacote realizando uma solicitação ara a hora do sistema em B
3. O host A deve receber um pacote do host B com a hora do sistema em B
4. O host A deve mostrar na tela a hora do sistema em B, e também, o RTT calculado em relação a solicitação◦ A hora mostrada na tela deve seguir o formato “dd/MM/yyyy hh:mm:ss:ms”
IMPORTANTE: O lado B irá enviar a informação para A na forma de bytes. Não pode
transformar a hora do sistema em um Objeto (como String), e utilizar a função writebytes para escrever no pacote
O lado B deve enviar um pacote com tamanho de 8 bytes, suficiente para enviar os 1 long relativos à hora do sistema
14
top related