Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Programação de Sockets
Objetivo: aprender a construir aplicações cliente/servidor que se
comunicam usando sockets
controlado pelo
controlado pelo processo processo
criador da aplicação
criador da aplicação
socket socket
TCP com TCP com
controlado pelo controlado pelo
sistema buffers, buffers, sistema
internet variáveis
operacional variáveis operacional
host ou host ou
servidor servidor
Cliente
bind()
socket()
listen()
connect()
accept()
write()
read()
read() write()
close()
read()
close()
5
output input
stream stream
• cliente lê a linha modificada a partir
do stream inFromServer;
TCP socket
clientSocket
cliente TCP
socket
import java.io.*;
import java.net.*;
class TCPClient {
sentence = inFromUser.readLine();
Envia linha
para o servidor outToServer.writeBytes(sentence + '\n');
clientSocket.close();
} }
class TCPServer {
Cria stream de
saída, ligado ao DataOutputStream outToClient =
socket new DataOutputStream(connectionSocket.getOutputStream());
Lê linha do
socket clientSentence = inFromClient.readLine();
Cliente bind()
socket()
recvfrom()
sendto()
sendto()
recvfrom()
close()
13
inFromUser
stream
de entrada
processo
Process Entrada: recebe
cliente
pacote (TCP recebe
Saída: envia pacote “byte stream”)
(TCP envia “byte
receivePacket
sendPacket
stream”) pacote pacote
UDP UDP
socket UDP
clientSocket
cliente UDP
socket
import java.io.*;
import java.net.*;
class UDPClient {
public static void main(String args[]) throws Exception
{
Cria
stream de entrada BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));
Cria
socket cliente DatagramSocket clientSocket = new DatagramSocket();
Traduz
hostname para InetAddress IPAddress = InetAddress.getByName("hostname");
endereço IP
usando DNS byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];
String modifiedSentence =
new String(receivePacket.getData());
import java.io.*;
import java.net.*;
class UDPServer {
public static void main(String args[]) throws Exception
Cria {
datagram socket
DatagramSocket serverSocket = new DatagramSocket(9876);
na porta 9876
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
while(true)
{
Cria espaço para
DatagramPacket receivePacket =
datagramas recebidos
new DatagramPacket(receiveData, receiveData.length);
Recebe serverSocket.receive(receivePacket);
datagrama
Exemplo: servidor Java (UDP)
String sentence = new String(receivePacket.getData());
Obtém endereço IP
InetAddress IPAddress = receivePacket.getAddress();
e número da porta
do transmissor
int port = receivePacket.getPort();
sendData = capitalizedSentence.getBytes();
Cria datagrama
DatagramPacket sendPacket =
para enviar ao cliente
new DatagramPacket(sendData, sendData.length, IPAddress,
port);
Escreve o
datagrama no serverSocket.send(sendPacket);
socket (envia) }
}
} Termina o while loop,
retorna e espera por
outro datagrama