View
25
Download
0
Category
Preview:
DESCRIPTION
Infra-Estrutura de Comunicação (IF678). Bruno Gentilini (bgda) Eduardo Souza (efs) Luís Felipe Auto (lfag). Caio Mc Intyre (cfmi) Lucas Ventura (lvs) Sérgio Pessoa (srpvnf). Aula Prática 02 Programação de Sockets TCP e UDP. - PowerPoint PPT Presentation
Citation preview
Infra-Estrutura de Comunicação(IF678)
Aula Prática 02 Programação de Sockets TCP e UDP
Professor: Paulo Gonçalves (pasg@cin.ufpe.br)
CIn/UFPE
Bruno Gentilini (bgda)
Eduardo Souza (efs)
Luís Felipe Auto (lfag)
Caio Mc Intyre (cfmi)
Lucas Ventura (lvs)
Sérgio Pessoa (srpvnf)
2
http://http://groups.google.com.br/groups.google.com.br/group/comunicacao20082group/comunicacao20082
Nosso objetivo:
Revisão sobre Socket Programação de Sockets TCP e UDP Desenvolver um servidor Web
3
AgendaAgenda
4
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
5
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
6
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();}
}} 7
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();
} }
9
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);
}
}
} 10
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.
11
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/~cfmi/comunicacao no link [Aulas]
Desenvolver um servidor Desenvolver um servidor Web...Web...
12
13
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...
14
ReferênciasReferências
1. James F. Kurose and Keith W. Ross, "Redes de Computadores e a Internet - Uma Nova Abordagem", 3a. edição - 2005 - Ed. Addison Wesley BRA
2. http://www.rfc.net/ 3. http://www.ietf.org/rfc.html4. http://java.sun.com/j2se/1.5.0/docs/api/java/net/package-
summary.html 5. http://java.sun.com/j2se/1.5.0/docs/api/java/net/Socket.html 6. Slides anteriores da monitoria feitos por flávio almeida (faas).
Recommended