Upload
felipe-matheus
View
219
Download
3
Embed Size (px)
Citation preview
Infra-Estrutura de Comunicação(IF678)
Aula Prática 02 Programação de Sockets TCP e UDP
Hugo Simões ([email protected])Original por: Flávio Almeida ([email protected])
Professor: Paulo Gonçalves ([email protected])
CIn/UFPE
Importante:
Cadastro no grupo da disciplina:
• http://groups.google.com.br/group/infra-comunicao2008-1/subscribe
3
Nosso objetivo:
Revisão sobre Socket Programação de Sockets TCP e UDP Desenvolver um servidor Web
4
Agenda1. Comunicação entre processos2. Programação de Socket TCP3. Programação de Socket UDP4. Desenvolver um servidor Web...
5
Comunicação entre processos 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
Analogia: Casa e porta (processo e socket)
Interação dos programas cliente e servidor (TCP) [1/2]
1.Cliente tem a tarefa de iniciar contato com o servidor.
2. Servidor deve está pronto: ativo, rodando antes do cliente tentar iniciar contato
possuir alguma porta (socket) para acolher algum contato inicial de um processo cliente.
3. O processo cliente pode iniciar uma conexão TCP, o que é feito a partir da criação de um socket parâmetros do socket : Endereço IP do hospedeiro servidor e o número de porta do processo servidor
Analogia: ‘bater à porta’ (contato inicial)
Interação dos programas cliente e servidor (TCP) [2/2]
4. TCP cliente inicia uma apresentação de 3 vias e estabelece uma conexão TCP com Servidor
cliente “bate” no socket de entrada do servidor
servidor ‘ouve’ a batida e cria um novo socket dedicado àquele cliente
Ao final da apresentação, existe uma conexão TCP entre o socket cliente e o novo socket do servidor
8
Programação de Socket TCP - Clientimport java.io.*;
import java.net.*;class TCPClient {public static void main(String argv[]) throws Exception {
String sentence; String modifiedSentence;
BufferedReader inFromUser = // cria Stream de entrada (teclado) new BufferedReader(new InputStreamReader(System.in));
Socket clientSocket = new Socket("hostname", 8000); // cria Socket Cliente, conecta ao servidor
DataOutputStream outToServer = // cria Stream de saida(do cliente pro servidor)new DataOutputStream(clientSocket.getOutputStream()); // junto ao socket cliente
BufferedReader inFromServer =new BufferedReader(newInputStreamReader(clientSocket.getInputStream())); // cria Stream de entrada (vindo servidor)
// junto ao socket clientesentence = inFromUser.readLine();
outToServer.writeBytes(sentence + '\n'); // envia a string ao servidor
modifiedSentence = inFromServer.readLine(); // ler string que veio do servidorSystem.out.println("FROM SERVER: " + modifiedSentence);clientSocket.close();
} }
9
Programação de Socket TCP - Serverimport java.io.*;import java.net.*;
class TCPServer {
public static void main(String argv[]) throws Exception {String clientSentence;String capitalizedSentence;ServerSocket welcomeSocket = new ServerSocket(8000); //cria porta de entrada de numero 8000
while(true) {Socket connectionSocket = welcomeSocket.accept(); // Aguardando no socket de entrada, um contato do cliente // para criar nova porta dedicada ao cliente especifico
BufferedReader inFromClient = // cria Stream de entrada (vindo do Cliente) junto ao socket de conexnew BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
DataOutputStream outToClient = //cria Stream de saida (do Servidor pro cliente) junto ao socket de conxnew DataOutputStream(connectionSocket.getOutputStream());
clientSentence = inFromClient.readLine(); capitalizedSentence = clientSentence.toUpperCase() + '\n';outToClient.writeBytes(capitalizedSentence); //envia String para o cliente}
} }
10
Programação de Socket UDP - Client
import java.io.*;import java.net.*;
class UDPClient {
public static void main(String args[]) throws Exception {BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));DatagramSocket clientSocket = new DatagramSocket();InetAddress IPAddress = InetAddress.getByName("hostname");byte[] sendData = new byte[1024];byte[] receiveData = new byte[1024];String sentence = inFromUser.readLine();sendData = sentence.getBytes();DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9000);clientSocket.send(sendPacket);DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);clientSocket.receive(receivePacket);String modifiedSentence = new String(receivePacket.getData());System.out.println("FROM SERVER:" + modifiedSentence);clientSocket.close();} }
11
Programação de Socket UDP - Server
import java.io.*;import java.net.*;
class UDPServer {
public static void main(String args[]) throws Exception {DatagramSocket serverSocket = new DatagramSocket(9876);byte[] receiveData = new byte[1024];byte[] sendData = new byte[1024];
while(true) {DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);serverSocket.receive(receivePacket);String sentence = new String(receivePacket.getData());InetAddress IPAddress = receivePacket.getAddress();int port = receivePacket.getPort();String capitalizedSentence = sentence.toUpperCase();sendData = capitalizedSentence.getBytes();DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port);serverSocket.send(sendPacket);} } }
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/~ejgcs/comunicacao no link [Aulas]
12
Desenvolver um servidor Web...
13
Exemplo – O que deve ser feitoRequisição (via browser ou
telnet)
GET /index.html HTTP/1.0Host: localhost
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)
GET /img2.png HTTP/1.0Host: localhost
Resposta (seu servidor)
HTTP/1.0 200 OKContent-Language: pt-BRContent-Length: 733Content-Type: image/pngConnection: closeCRLF “enter”dados...
14
Referências1. 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