Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Sockets

Introdução

Um socket e um ponto final (endpoint) de comunicacao entre processos em uma rede.
Ele combina um endereco IP, uma porta e um protocolo de transporte (TCP ou UDP).
Sockets pertencem a camada de aplicacao, mas dependem diretamente da camada de transporte.

Em geral, uma aplicacao abre um socket, define para onde deseja enviar ou de onde deseja receber dados, e troca mensagens com outra aplicacao.

Conceitos essenciais

Processo, porta e socket

Tipos de socket

Estados comuns em TCP

Como a comunicacao acontece

TCP

  1. Servidor cria socket e escuta em uma porta.

  2. Cliente cria socket e conecta ao servidor.

  3. O TCP realiza o handshake (SYN, SYN-ACK, ACK) e inicia uma conexão.

  4. Dados sao enviados como um fluxo de bytes.

  5. Conexao é encerrada com controle de fechamento.

UDP

  1. Servidor cria socket e associa a uma porta.

  2. Cliente envia datagramas para o IP:porta.

  3. Cada datagrama e independente (nao há conexão).

Relacao com as camadas TCP/IP

Práticas

Pratica 1: Chat simples com netcat (TCP)

Objetivo: criar uma comunicacao cliente-servidor usando TCP.

  1. No terminal para análise execute:

netstat -a -n | grep 9000
  1. No terminal para o Servidor, execute:

nc -l 9000
  1. Volte ao terminal de Análise, e observe novamente a porta 9000.

netstat -a -n | grep 9000
  1. No terminal do Cliente, execute:

nc 127.0.0.1 9000
  1. Volte ao terminal de Análise, e observe novamente a porta 9000.

netstat -a -n | grep 9000
  1. Digite mensagens nos terminais conectados e observe se elas são entregues ao outro host.

Prática 2: Envio de datagramas com netcat (UDP)

Objetivo: comparar UDP e TCP.

  1. Inicie o Servidor UDP:

nc -u -l 9001
  1. Em outro terminal, envie datagramas com um cliente UDP:

nc -u 127.0.0.1 9001
  1. Envie mensagens e observe se há conexão estabelecida.

    • o que é possível concluir aqui?

Pratica 3: Cliente e servidor (TCP)

Objetivo: implementar um servidor simples que responde mensagens.

Pseudocódigo
Java
Python
C
Servidor
servidor:
  criar socket TCP
  bind em 0.0.0.0:9002
  listen
  aceitar conexao
  receber ate 1024 bytes
  enviar "OK: " + dados
  fechar conexao
Cliente
cliente:
  criar socket TCP
  conectar em 127.0.0.1:9002
  enviar "ola socket"
  receber resposta
  imprimir resposta

Execute o servidor e depois o cliente. Observe o papel de bind, listen, accept, connect, sendall/write e recv/read.


Boas práticas e erros comuns