Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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.
#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;
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);
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); }}