Você está na página 1de 2

Universidade Federal de Minas Gerais

DCC023: Redes de Computadores


Trabalho Prtico (TP0)

Introduo
Este um trabalho simples, introdutrio, apenas para permitir um primeiro contato com a
programao em sockets.

Neste trabalho iremos desenvolver duas aplicaes. Uma aplicao cliente que se conecta a um
servidor e modifica um contador global, e uma aplicao servidora que controla o contador
global. Qual aplicao voc ir desenvolver depende do seu nmero de matrcula (ver entrega e
avaliao).

Trabalho individual
Valor: 5 pontos
Data de entrega: 27 de maro s 13:00 no sero aceitos trabalhos atrasados!
Linguagem: C ou Python (todos devem ser capazes de comunicar com todos).

Objetivos
Introduzir a interface de programao de soquetes POSIX.
Introduzir os conceitos de aplicao cliente e aplicao servidor.

Execuo
O trabalho individual e vale 5 pontos.
A data de entrega est disponvel no Moodle ou no Plano de Curso.

Especificao

Programa Cliente
O programa cliente ir se conectar ao servidor [socket, bind, connect]. Aps estabelecimento da
conexo, o cliente ir enviar um (1) byte contendo os caracteres + ou -, requisitando o
incremento ou decremento do contador global (mdulo 1000, de forma que o contador s possa
assumir valores entre 0 e 999) [send]. Aps o envio da requisio, o cliente ir esperar do
servidor um inteiro de 4 bytes codificado em network byte order [htons/ntohs] contendo o valor
do contador global [recv]. Aps recebimento do contador global, o cliente dever reenviar o
valor recebido para o servidor em trs caracteres numricos (em formato ASCII) [sprintf],
confirmando o recebimento e processamento da mensagem [send]. Aps o envio da
comunicao, o cliente de fechar a conexo com o servidor [close].
Programa Servidor
O programa servidor ir esperar a conexo de clientes [socket, bind, listen, accept]. Aps o
estabelecimento de uma conexo, o servidor dever receber um (1) byte de requisio [recv].
Aps o recebimento da requisio, o servidor dever process-la e enviar o valor prximo valor
do contador global para o cliente [send]; o valor do contador deve ser enviado como um inteiro
de 4 bytes codificado em network byte order [htons/ntohs]. Aps o envio do prximo valor do
contador, o servidor dever esperar trs bytes contendo a confirmao do valor do contador pelo
cliente [recv]. Aps o recebimento da confirmao (ou disparo do temporizador), o servidor deve
fechar a conexo com o cliente [close]. Se o valor confirmado pelo cliente for o prximo valor
do contador [atoi], o servidor atualiza o contador global.

Detalhes de Implementao
O servidor dever escutar no endereo IP 127.0.0.1 (representando a mquina local em
que o programa executa) e no porto 51515.
Os caracteres '+' e '-' devem ser transmitidos em 1 byte usando codificao ASCII.
Clientes e servidores devem configurar um temporizador (timeout) para detectar falhas de
comunicao ao chamar a funo [recv]. A configurao de temporizador feita
chamando-se a funo [setsockopt]. No Linux, em C, as opes disponveis para uso na
funo [setsockopt] so descritas na seo [socket] do manual 7 (acesse usando [man 7
socket]); procure por [SO_RCVTIMEO]. Em Python, o socket tem uma opo
[settimeout].

Entrega e Avaliao
Voc deve entregar o cdigo fonte do seu programa. Se o seu nmero de matrcula for mpar,
voc deve entregar o cdigo do programa cliente; se seu nmero de matrcula for par, voc
dever entregar o cdigo do programa servidor.

Seu programa ser testado semi-automaticamente com as implementaes de referncia do


cliente e servidor implementados pelo professor. Por isso, envie apenas o cdigo fonte
(arquivo .c) do seu programa. Para testar o correto funcionamento do seu cliente ou servidor,
teste seu programa com o programa complementar de outros colegas.