Top Banner
Gustavo Leitão Programação com Sockets TCP e UDP - Cliente 5/24/2010
22

Programação com Sockets TCP e UDP - Cliente...5/24/2010 ARQUITETURA DE REDE Aplicação (FTP, HTTP, SMTP) Transporte (TCP e UDP) Rede (IP) Enlace (Ethernet) Aplicação (FTP, HTTP,

Jun 26, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Programação com Sockets TCP e UDP - Cliente...5/24/2010 ARQUITETURA DE REDE Aplicação (FTP, HTTP, SMTP) Transporte (TCP e UDP) Rede (IP) Enlace (Ethernet) Aplicação (FTP, HTTP,

Gustavo Leitão

Programação com Sockets TCP e UDP - Cliente

5/24/2010

Page 2: Programação com Sockets TCP e UDP - Cliente...5/24/2010 ARQUITETURA DE REDE Aplicação (FTP, HTTP, SMTP) Transporte (TCP e UDP) Rede (IP) Enlace (Ethernet) Aplicação (FTP, HTTP,

5/24/2010

INTRODUÇÃO

Objetivo da Aula

Page 3: Programação com Sockets TCP e UDP - Cliente...5/24/2010 ARQUITETURA DE REDE Aplicação (FTP, HTTP, SMTP) Transporte (TCP e UDP) Rede (IP) Enlace (Ethernet) Aplicação (FTP, HTTP,

5/24/2010

OBJETIVO DA AULA

Apresentar ao aluno conceitos e prática em sockets

Page 4: Programação com Sockets TCP e UDP - Cliente...5/24/2010 ARQUITETURA DE REDE Aplicação (FTP, HTTP, SMTP) Transporte (TCP e UDP) Rede (IP) Enlace (Ethernet) Aplicação (FTP, HTTP,

5/24/2010

INTRODUÇÃO

O que é um socket?

Page 5: Programação com Sockets TCP e UDP - Cliente...5/24/2010 ARQUITETURA DE REDE Aplicação (FTP, HTTP, SMTP) Transporte (TCP e UDP) Rede (IP) Enlace (Ethernet) Aplicação (FTP, HTTP,

5/24/2010

INTRODUÇÃO

O que é um Socket?

Segundo Brian Beej Hall é a interface que permite conversar com outros

programas

De acordo com James F Kurose: “socket é a interface entre a camada de aplicação e a de transporte dentro de

uma máquina”.

Page 6: Programação com Sockets TCP e UDP - Cliente...5/24/2010 ARQUITETURA DE REDE Aplicação (FTP, HTTP, SMTP) Transporte (TCP e UDP) Rede (IP) Enlace (Ethernet) Aplicação (FTP, HTTP,

5/24/2010

INTRODUÇÃO

Características

Uma das primeiras formas de programação distribuída

(programas podem ser executados em uma ou

diversas máquinas)

Baseado no modelo de comunicação

Cliente/Servidor

Utiliza um protocolo de transporte (UDP, TCP)

Page 7: Programação com Sockets TCP e UDP - Cliente...5/24/2010 ARQUITETURA DE REDE Aplicação (FTP, HTTP, SMTP) Transporte (TCP e UDP) Rede (IP) Enlace (Ethernet) Aplicação (FTP, HTTP,

5/24/2010

ARQUITETURA DE REDE

Aplicação (FTP, HTTP, SMTP)

Transporte (TCP e UDP)

Rede (IP)

Enlace (Ethernet)

Aplicação (FTP, HTTP, SMTP)

Transporte (TCP e UDP)

Rede (IP)

Enlace (Ethernet)

Socket

Page 8: Programação com Sockets TCP e UDP - Cliente...5/24/2010 ARQUITETURA DE REDE Aplicação (FTP, HTTP, SMTP) Transporte (TCP e UDP) Rede (IP) Enlace (Ethernet) Aplicação (FTP, HTTP,

5/24/2010

TIPOS DE SOCKETES

TCP x UDP

TCP

• Orientado a Conexão

• Controle de Erro

• Garante Entrega

• Entrega Ordenada

UDP

• Não necessita de conexão

• Não Possui controle de erro

• Mais simples e rápido

x

Page 9: Programação com Sockets TCP e UDP - Cliente...5/24/2010 ARQUITETURA DE REDE Aplicação (FTP, HTTP, SMTP) Transporte (TCP e UDP) Rede (IP) Enlace (Ethernet) Aplicação (FTP, HTTP,

5/24/2010

TIPOS DE SOCKETS

Page 10: Programação com Sockets TCP e UDP - Cliente...5/24/2010 ARQUITETURA DE REDE Aplicação (FTP, HTTP, SMTP) Transporte (TCP e UDP) Rede (IP) Enlace (Ethernet) Aplicação (FTP, HTTP,

5/24/2010

BYTE ORDER

Alguns computadores armazenam os números em Big-Endian, ou seja, o Byte mais significativo primeiro

•Ex: O número de dois bytes em hexadecimal representado por 4b5f será armazenado na seguinte ordem: 4b 5f

Porém outros computadores (x86, Intel, Motorola, etc) armazenam seus dados em Little-Endian, ou seja, o byte menos significativo primeiro

•Ex: O número 4b5f seria armazenado na seguinte ordem: 5f 4b

Page 11: Programação com Sockets TCP e UDP - Cliente...5/24/2010 ARQUITETURA DE REDE Aplicação (FTP, HTTP, SMTP) Transporte (TCP e UDP) Rede (IP) Enlace (Ethernet) Aplicação (FTP, HTTP,

5/24/2010

BYTE ORDER

Big-Endian é também chamado de Network Byte Order, por que é a forma como os dados devem ser

transmitidos em rede.

Seu computador, porém armazena números em Host Byte Order (Little-

Endian)

Page 12: Programação com Sockets TCP e UDP - Cliente...5/24/2010 ARQUITETURA DE REDE Aplicação (FTP, HTTP, SMTP) Transporte (TCP e UDP) Rede (IP) Enlace (Ethernet) Aplicação (FTP, HTTP,

5/24/2010

BYTE ORDER

htons() host to network short htonl() host to network long ntohs() network to host short ntohl() network to host long

Para resolver esse problema temos as seguinte funções:

Page 13: Programação com Sockets TCP e UDP - Cliente...5/24/2010 ARQUITETURA DE REDE Aplicação (FTP, HTTP, SMTP) Transporte (TCP e UDP) Rede (IP) Enlace (Ethernet) Aplicação (FTP, HTTP,

5/24/2010

CHAMADAS DE SISTEMA

socket (protofamily,type,protocol)

bind (socket,localaddr,addrlen)

listen (socket,queuesize)

accept (socket,caddress,caddresslen)

connect (connect,saddress,saddresslen)

send (socket,data,lenght,flags)

recv (socket,buffer,lenght,flags)

close (socket)

Page 14: Programação com Sockets TCP e UDP - Cliente...5/24/2010 ARQUITETURA DE REDE Aplicação (FTP, HTTP, SMTP) Transporte (TCP e UDP) Rede (IP) Enlace (Ethernet) Aplicação (FTP, HTTP,

5/24/2010

PROGRAMA TÍPICO

close();

send();

receiv();

“Aguardando Conexão”

accept();

listning();

bind();

socket();

Servidor

close();

receiv();

send();

connect();

socket();

Cliente

Page 15: Programação com Sockets TCP e UDP - Cliente...5/24/2010 ARQUITETURA DE REDE Aplicação (FTP, HTTP, SMTP) Transporte (TCP e UDP) Rede (IP) Enlace (Ethernet) Aplicação (FTP, HTTP,

5/24/2010

PROGRAMA TÍPICO

#include <sys/types.h>

#include <sys/socket.h> //Criando o socket (internet, TCP, IP) int socketfd = socket(AF_INET, SOCK_STREAM, 0));

if (socketfd == -1 ){

perror(“Error socket() ”) ;

exit ( 1 ) ;

}

Socket - Acesso ao Descritor de Arquivo!

Domínios: AF_UNIX, AF_LOCAL - Comunicação Local AF_INET - IPv4 AF_INET6 IPv6

int socket(int domain, int type, int protocol);

Tipos: SOCK_STREAM - TCP SOCK_DGRAM - UDP

Page 16: Programação com Sockets TCP e UDP - Cliente...5/24/2010 ARQUITETURA DE REDE Aplicação (FTP, HTTP, SMTP) Transporte (TCP e UDP) Rede (IP) Enlace (Ethernet) Aplicação (FTP, HTTP,

5/24/2010

EXEMPLO 1

Page 17: Programação com Sockets TCP e UDP - Cliente...5/24/2010 ARQUITETURA DE REDE Aplicação (FTP, HTTP, SMTP) Transporte (TCP e UDP) Rede (IP) Enlace (Ethernet) Aplicação (FTP, HTTP,

5/24/2010

PROGRAMA TÍPICO

struct sockaddr {

unsigned short sa_family; // tipo de endereço, AF_xxx

char sa_data[14]; // 14 bytes do endereço de protocolo

};

struct sockaddr_in {

short int sin_family; // tipo de endereço

unsigned short int sin_port; //Número da porta

struct in_addr sin_addr; //Endereço de Internet

unsigned char sin_zero[8]; //Mesmo tamanho de struct sockaddr

};

struct in_addr {

unsigned long s_addr;

};

Connect- Inicializa conexão com um socket

int connect(int sockfd, const struct sockaddr *addr,

socklen_t addrlen);

Page 18: Programação com Sockets TCP e UDP - Cliente...5/24/2010 ARQUITETURA DE REDE Aplicação (FTP, HTTP, SMTP) Transporte (TCP e UDP) Rede (IP) Enlace (Ethernet) Aplicação (FTP, HTTP,

5/24/2010

PROGRAMA TÍPICO

int socketId;

socketId = socket(AF_INET, SOCK_STREAM, 0); //Criando o socket

struct sockaddr_in endereco; //Struct de endereco

endereco.sin_family = AF_INET; //tipo do protocolo

endereco.sin_port = htons(4325); //porta

endereco.sin_addr.s_addr = inet_addr("127.0.0.1"); //o endereco do servidor

bzero( &( endereco.sin_zero ), 8); //inserir zeros

int r = connect (socketId, (struct sockaddr *)&endereco, sizeof(struct

sockaddr));

if (r == -1 ) {

perror("Error connect()\n");

exit(1);

}

Connect- Inicializa conexão com um socket

int connect(int sockfd, const struct sockaddr *addr,

socklen_t addrlen);

Page 19: Programação com Sockets TCP e UDP - Cliente...5/24/2010 ARQUITETURA DE REDE Aplicação (FTP, HTTP, SMTP) Transporte (TCP e UDP) Rede (IP) Enlace (Ethernet) Aplicação (FTP, HTTP,

5/24/2010

PROGRAMA TÍPICO

char caracter = 'A';

//Enviando um A para o servidor

if (send (socketId, &caracter, sizeof(caracter), 0) == -1 ) {

perror ("Error send\n");

exit(1);

}

Send e Recv – Envia e recebe mensagens (TCP)

ssize_t send(int sockfd, const void *buf, size_t len, int flags);

ssize_t recv(int sockfd, void *buf, size_t len, int flags);

int bytesLidos;

if (bytesLidos = recv (socketId, &caracter, 1, 0) == -1) {

perror("Error recv\n");

exit(1);

}

Page 20: Programação com Sockets TCP e UDP - Cliente...5/24/2010 ARQUITETURA DE REDE Aplicação (FTP, HTTP, SMTP) Transporte (TCP e UDP) Rede (IP) Enlace (Ethernet) Aplicação (FTP, HTTP,

5/24/2010

PROGRAMA TÍPICO

SendTo e RecvFrom – Envia e recebe mensagens (UDP)

ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,

const struct sockaddr *dest_addr, socklen_t addrlen);

ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,

struct sockaddr *src_addr, socklen_t *addrlen);

Page 21: Programação com Sockets TCP e UDP - Cliente...5/24/2010 ARQUITETURA DE REDE Aplicação (FTP, HTTP, SMTP) Transporte (TCP e UDP) Rede (IP) Enlace (Ethernet) Aplicação (FTP, HTTP,

5/24/2010

PROGRAMA TÍPICO

Close – Fecha a conexão

int close(int socketfd);

int shutdown(int socketfd, int how);

How: 0 – Fecha a conexão para receber mensagens 1 – Fecha conexão para envio de mensagens 2 – Fecha a conexão para ambos os lados similar o close()

Page 22: Programação com Sockets TCP e UDP - Cliente...5/24/2010 ARQUITETURA DE REDE Aplicação (FTP, HTTP, SMTP) Transporte (TCP e UDP) Rede (IP) Enlace (Ethernet) Aplicação (FTP, HTTP,

Gustavo Bezerra Paz Leitão

5/24/2010