Sei sulla pagina 1di 6

RELATORIO DO LABORATORIO 2

SOCKETS PARA TCP E UDP

Andrs Esteban Buitrago Reyes e Manuel Sebastin Bernal Daz


250152-2501

Universidade federal de Rio Grande Do Sul

I. Introduo
No seguinte relatrio e aprendemos como que funciona no modelo OSI no nvel de
transporte. Para isto, fazemos dois algoritmos que cream sockets para fazer as duas
maneiras de comunicao, sim conexo (UDP) e com conexo (TCP). No software DU
METER olhamos os nmeros de bits na rede depois de trocar os dois algoritmos dados por
o professor.

II. Socket para UDP


Verificar as estruturas analisadas no diretrio esqueleto_udp. Testar programa como
est. Transformar o transmissor para enviar um nmero bits/s na rede de acordo com as
seguintes linhas de comando:

-r n: onde n = multiplicao da idade da dupla em kbit/s. Por exemplo, se os dois


possuem 20 anos, deve ser 400 kbit/s.
-r 1000: 1 Mbit/s
-r 2000: 2Mbit/s
Nos modificamos o algoritmo para poder fazer o cmbio de bits por segundo enviados
pela rede. Para isso ns criamos trs varivel onde guardamos a informao de Kbits que
depois entre 8 para guardar na varivel Kbytes e um backup para salvar o valor em backup.
No algoritmo estamos enviando quadros de tamanho de 1250 bytes ou seja 10 Kbits.
Criasse uma banda de 10 Kbits porque estamos enviado quadros durante um determinado
tempo.
Cdigo Fonte:
#include <stdio.h>
#include <string.h>
#ifdef _WIN32
#include <winsock2.h>
#else
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define SOCKET int
#endif

int main(int argc, char **argv){


struct sockaddr_in peer;
SOCKET s;
int porta, peerlen, rc, i;
char ip[16], buffer[100];
int kbits, kbytes, backup;

#ifdef _WIN32
WSADATA wsaData;

if (WSAStartup(MAKEWORD(2,2), &wsaData) != 0) {
printf("Erro no startup do socket\n");
exit(1);
}
#endif

if(argc < 7) {
printf("Utilizar:\n");
printf("trans -h <numero_ip> -p <porta> -r <kbtis/s>\n");
exit(1);
}

// Pega parametros
for(i=1; i<argc; i++) {
if(argv[i][0]=='-') {
switch(argv[i][1]) {
case 'h': // Numero IP
i++;
strcpy(ip, argv[i]);
break;

case 'p': // porta


i++;
porta = atoi(argv[i]);
if(porta < 1024) {
printf("Valor da porta invalido\n");
exit(1);
}
break;
case 'r': // Kbtis/segundo
i++;
kbits = atoi(argv[i]);
kbytes = kbits/8;
backup = kbytes;
break;

default:
printf("Parametro invalido %d: %s\n",i,argv[i]);
exit(1);
}
} else {
printf("Parametro %d: %s invalido\n",i, argv[i]);
exit(1);
}
}
// Cria o socket na familia AF_INET (Internet) e do tipo UDP (SOCK_DGRAM)
if((s = socket(AF_INET, SOCK_DGRAM,0)) < 0) {
printf("Falha na criacao do socket\n");
exit(1);
}
// Cria a estrutura com quem vai conversar
peer.sin_family = AF_INET;
peer.sin_port = htons(porta);
peer.sin_addr.s_addr = inet_addr(ip);
peerlen = sizeof(peer);

float sleepTime; (1)


sleepTime = (float)10/kbits; (2)
sleepTime = sleepTime*1000; (3)

int contador, bytessobra;


if(kbits%10 != 0)
{
contador=kbits/10+1;
bytessobra = ((kbits%10)*1000)/8;
sleepTime = (float)1000/contador;
}
else
contador = -1;

while(1)
{if (contador > -1)
{ if (contador > 1)
{ sendto(s, buffer, 1250, 0, (struct sockaddr *)&peer, peerlen);
contador --;}
else
{ sendto(s, buffer, bytessobra, 0, (struct sockaddr *)&peer, peerlen);
contador = kbits/10+1; }}
else
{ sendto(s, buffer, 1250, 0, (struct sockaddr *)&peer, peerlen); }
Sleep(sleepTime); }}

As duas maneiras de calcular o tempo de sleep so considerando dos casos: quando a


banda de rede fica mltiplo de 10 e quando a banda no mltiplo de 10. No primeiro
caso, dividisse 10 Kbits pelos Kbits que usuario ingressa e depois multiplicar por mil para o
tempo este em milissegundos. (Observasse na lnea em negrita 1, 2 e 3).
No segundo caso, os Kbits que usuario entrega no algoritmo e redondeado para cima com
isso o nmero fica mltiplo de 10, ento faz igual que caso anterior dividisse por 10 e os
bytes que sobram quando faz a redondeada so enviados em um ltimo quadro para
completar a banda requerida pelo usuario.
Analisasse no software DU METER a transmisso de rede com duas maquinas e obtivesse
os seguinte dados.

Idade multiplicada = 19* 20 = 380Kbit/s


A conexo foi feita por duas maquinas conectadas a uma rede WIFI. Ento as redes ficam
em uma mesma banda mais esto com resgo de coliso o interferncia quando outro
usuria entre na rede.
1Mbit/s
2 Mbit/s

Potrebbero piacerti anche