0% acharam este documento útil (0 voto)
46 visualizações8 páginas

Programação de Socket em Java

O documento aborda a programação de sockets em Java, explicando conceitos fundamentais como tipos de sockets (TCP e UDP) e a arquitetura cliente-servidor. Ele detalha as classes de socket disponíveis em Java, como implementar um aplicativo cliente-servidor simples e como lidar com múltiplos clientes usando threads. Além disso, o documento oferece boas práticas e soluções para problemas comuns na programação de sockets.

Enviado por

ttsmithson2
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
46 visualizações8 páginas

Programação de Socket em Java

O documento aborda a programação de sockets em Java, explicando conceitos fundamentais como tipos de sockets (TCP e UDP) e a arquitetura cliente-servidor. Ele detalha as classes de socket disponíveis em Java, como implementar um aplicativo cliente-servidor simples e como lidar com múltiplos clientes usando threads. Além disso, o documento oferece boas práticas e soluções para problemas comuns na programação de sockets.

Enviado por

ttsmithson2
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

Programação de socket em

Java

Escola Básica e Secundária do Padrão da Légua (Escola Sede)


Rua dos Fogueteiros 4460-723 Custóias MTS – TF:229517676
Contribuinte – 600 085 155 - Email : [email protected]
Índice
1. Introdução aos sockets
●​ O que é um socket?
●​ Tipos de sockets
●​ Arquitetura cliente-servidor
2. Classes de socket Java
●​ Classe de socket
●​ ServerSocket Classe
3. Como funcionam os sockets
●​ Estabelecendo uma ligação
●​ Envio e Receção de Dados
●​ Fechando a ligação
4. Implementando um aplicativo cliente-servidor simples
●​ Implementação do lado do servidor
●​ Implementação do lado do cliente
5. Lidando com vários clientes
●​ Usando threads
●​ Exemplo: Servidor de Chat Multicliente
6. Boas Práticas
7. Problemas comuns e solução de problemas

Escola Básica e Secundária do Padrão da Légua (Escola Sede)


Rua dos Fogueteiros 4460-723 Custóias MTS – TF:229517676
Contribuinte – 600 085 155 - Email : [email protected]
1. Introdução aos sockets
O que é um socket?

Um socket é um ponto de extremidade para comunicação entre duas máquinas através de


uma rede. Permite que os programas enviem e recebam dados usando uma combinação de
um endereço IP e um número de porta.

Tipos de sockets
●​ Stream Sockets (TCP): Comunicação fiável e orientada para a ligação. Os
dados são enviados como um fluxo contínuo.
●​ Sockets de datagrama (UDP): comunicação não confiável e sem ligação. Os
dados são enviados como pacotes individuais.

Arquitetura cliente-servidor
●​ Servidor: Aguarda conexões de entrada e processa solicitações.
●​ Cliente: Inicia uma ligação com o servidor para enviar ou receber dados.

2. Classes de socket Java


O Java fornece duas classes principais para programação de socket:

Classe de socket
●​ Representa o socket do lado do cliente.
●​ Usado para se conectar a um servidor.
●​ Metodologia:
○​ getInputStream(): Obtém o fluxo de entrada para receber dados.
○​ getOutputStream(): Obtém o fluxo de saída para enviar dados.
○​ close(): Fecha o socket.

ServerSocket Classe
●​ Representa o socket do lado do servidor.
●​ Aguarda por conexões de cliente de entrada.
●​ Metodologia:
○​ accept(): escuta uma ligação e retorna um objeto Socket.
○​ close(): Fecha o socket do servidor.

Escola Básica e Secundária do Padrão da Légua (Escola Sede)


Rua dos Fogueteiros 4460-723 Custóias MTS – TF:229517676
Contribuinte – 600 085 155 - Email : [email protected]
3. Como funcionam as sockets
Passos para a Comunicação
1. Servidor:
○​ Cria um ServerSocket e o vincula a uma porta específica.
○​ Aguarda conexões de cliente usando accept().
○​ Uma vez que uma ligação é estabelecida, ele se comunica com o cliente
usando fluxos de entrada / saída.
2. Cliente:
○​ Cria um socket e se conecta ao servidor usando o endereço IP e a porta
do servidor.
○​ Comunica-se com o servidor usando fluxos de entrada/saída.
3. Intercâmbio de dados:
○​ Os dados são enviados e recebidos usando InputStream e OutputStream.
4. Fechando a ligação:
○​ O cliente e o servidor fecham seus sockets após a conclusão da
comunicação.

Escola Básica e Secundária do Padrão da Légua (Escola Sede)


Rua dos Fogueteiros 4460-723 Custóias MTS – TF:229517676
Contribuinte – 600 085 155 - Email : [email protected]
4. Implementando um aplicativo cliente-servidor
simples
Implementação do lado do servidor
import java.io.*;
import java.net.*;

public class SimpleServer {


public static void main(String[] args) {
try (ServerSocket serverSocket = new ServerSocket(12345)) {
System.out.println("Server is listening on port 12345...");
Socket socket = serverSocket.accept();
System.out.println("Client connected!");

// Input and output streams


BufferedReader in = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);

// Read data from client


String message = in.readLine();
System.out.println("Received from client: " + message);

// Send response to client


out.println("Hello from server!");

// Close resources
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

Escola Básica e Secundária do Padrão da Légua (Escola Sede)


Rua dos Fogueteiros 4460-723 Custóias MTS – TF:229517676
Contribuinte – 600 085 155 - Email : [email protected]
Implementação do lado do cliente
import java.io.*;
import java.net.*;

public class SimpleClient {


public static void main(String[] args) {
try (Socket socket = new Socket("localhost", 12345)) {
System.out.println("Connected to server!");

// Input and output streams


BufferedReader in = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);

// Send data to server


out.println("Hello from client!");

// Read response from server


String response = in.readLine();
System.out.println("Received from server: " + response);

// Close resources
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

Escola Básica e Secundária do Padrão da Légua (Escola Sede)


Rua dos Fogueteiros 4460-723 Custóias MTS – TF:229517676
Contribuinte – 600 085 155 - Email : [email protected]
5. Tratamento de vários clientes
Para lidar com vários clientes, o servidor deve criar um novo thread para cada
ligação de cliente.

Exemplo de servidor de chat multicliente


import java.io.*;
import java.net.*;
import java.util.*;

public class MultiClientServer {


private static Set<PrintWriter> clientWriters = new HashSet<>();

public static void main(String[] args) {


try (ServerSocket serverSocket = new ServerSocket(12345)) {
System.out.println("Chat Server is running...");
while (true) {
new ClientHandler(serverSocket.accept()).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}

private static class ClientHandler extends Thread {


private Socket socket;
private PrintWriter out;
private BufferedReader in;

public ClientHandler(Socket socket) {


this.socket = socket;
}

public void run() {


try {
in = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(), true);

synchronized (clientWriters) {
clientWriters.add(out);
}

String message;
while ((message = in.readLine()) != null) {
System.out.println("Received: " + message);
broadcast(message);
}
} catch (IOException e) {
System.out.println(e.getMessage());
} finally {

Escola Básica e Secundária do Padrão da Légua (Escola Sede)


Rua dos Fogueteiros 4460-723 Custóias MTS – TF:229517676
Contribuinte – 600 085 155 - Email : [email protected]
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
synchronized (clientWriters) {
clientWriters.remove(out);
}
}
}

private void broadcast(String message) {


synchronized (clientWriters) {
for (PrintWriter writer : clientWriters) {
writer.println(message);
}
}
}
}
}

6. Melhores práticas
●​ Sempre feche os sockets e fluxos usando try-with-resources ou,
finalmente, blocos.
●​ Use threads para lidar com vários clientes.
●​ Lide com exceções graciosamente (por exemplo, IOException).
●​ Use a sincronização ao acessar recursos compartilhados (por exemplo,
clientWriters).

7. Problemas comuns e solução de problemas


●​ ligação recusada: verifique se o servidor está em execução e se a porta
está correta.
●​ Tempo limite do socket: use setSoTimeout() para manipular tempos
limites.
●​ Fugas de recursos: feche sempre sockets e fluxos.
●​ Segurança de threads: use a sincronização quando vários threads
acessarem dados compartilhados.

Escola Básica e Secundária do Padrão da Légua (Escola Sede)


Rua dos Fogueteiros 4460-723 Custóias MTS – TF:229517676
Contribuinte – 600 085 155 - Email : [email protected]

Você também pode gostar