Title: Infra-Estrutura de Comunica
1Infra-Estrutura de Comunicação(IF678)
Aula Prática 02 Programação de Sockets TCP e UDP
Hugo Simões (hsms87_at_gmail.com) Original por
Flávio Almeida (faas_at_cin.ufpe.br)
Professor Paulo Gonçalves (pasg_at_cin.ufpe.br)
CIn/UFPE
2Importante
- Cadastro no grupo da disciplina
- http//groups.google.com.br/group/infra-comunicao2
008-1/subscribe
3- Nosso objetivo
- Revisão sobre Socket
- Programação de Sockets TCP e UDP
- Desenvolver um servidor Web
4Agenda
- Comunicação entre processos
- Programação de Socket TCP
- Programação de Socket UDP
- Desenvolver um servidor Web...
5Comunicaçã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)
6Interaçã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)
7Interaçã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
8Programação de Socket TCP - Client
- import 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.getOutputStrea
m()) // junto ao socket cliente - BufferedReader inFromServer new
BufferedReader(new InputStreamReader(clientSocket.
getInputStream())) // cria Stream de entrada
(vindo servidor) - // junto ao socket cliente
- sentence inFromUser.readLine()
9Programação de Socket TCP - Server
- import 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
conex - new BufferedReader(new InputStreamReader(connecti
onSocket.getInputStream())) - DataOutputStream outToClient //cria Stream de
saida (do Servidor pro cliente) junto ao socket
de conx
10Programaçã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("hos
tname") - byte sendData new byte1024
- byte receiveData new byte1024
- 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)
11Programaçã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 byte1024
- byte sendData new byte1024
- 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)
12Desenvolver um servidor Web...
- 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 RFC2616
- baixar código parcial em www.cin.ufpe.br/ejgcs/c
omunicacao no link Aulas
13Exemplo O que deve ser feito
- Requisição (via browser ou telnet)
- GET /index.html HTTP/1.0
- Host localhost
- Resposta (seu servidor)
- HTTP/1.0 200 OK
- Content-Language pt-BR
- Content-Length 53
- Content-Type text/html
- Connection close
- CRLF enter
- dados
- ...
- Requisição (via browser ou telnet)
- GET /img2.png HTTP/1.0
- Host localhost
- Resposta (seu servidor)
- HTTP/1.0 200 OK
- Content-Language pt-BR
- Content-Length 733
- Content-Type image/png
- Connection close
- CRLF enter
- dados
- ...
13
14Referências
- James F. Kurose and Keith W. Ross, "Redes de
Computadores e a Internet - Uma Nova Abordagem",
3a. edição - 2005 - Ed. Addison Wesley BRA - http//www.rfc.net/
- http//www.ietf.org/rfc.html
- http//java.sun.com/j2se/1.5.0/docs/api/java/net/p
ackage-summary.html - http//java.sun.com/j2se/1.5.0/docs/api/java/net/S
ocket.html
14