Leandro Soares de Sousa (DSc.) Página: Aula 05 - desenvolvimento com sockets

Tamanho: px
Começar a partir da página:

Download "Leandro Soares de Sousa (DSc.) Página: Aula 05 - desenvolvimento com sockets"

Transcrição

1 Tópicos Especiais Leandro Soares de Sousa (DSc.) Página: Aula 05 - desenvolvimento com sockets

2 Mais e mais ferramentas! 2 Aplicações distribuídas: desenvolvimento com sockets

3 A rede... uma breve revisão! 3 A pilha de protocolos da Internet, os sistemas e as APIs Socket Hospedeiro (HOST) Usuários Aplicações (sistemas) Aplicação (protocolos) Transporte (TCP/UDP) APIs Socket Sistema Operacional Rede (IP/ICMP/BGP...) Enlace (Ethernet/802.11/802.15/ ) Física (tecnologias: meios de comunicação)

4 A rede... uma breve revisão! 4 A rede através de sua infraestrutura. Nuvem Hospedeiro Hospedeiro Aplicação Aplicação Transporte Roteador Roteador Transporte Rede Rede Rede Rede Enlace Enlace Enlace Enlace Física Física Física Física

5 A rede... uma breve revisão! 5 Modelos de aplicação (Cliente/Servidor e Peer-to-Peer) Web, ,... Cliente Servidor Cliente

6 A rede... uma breve revisão! 6 Modelos de aplicação (Cliente/Servidor e Peer-to-Peer) Mais comum! (torrent,...) Cliente Servidor ou Servidores Cliente

7 A rede... uma breve revisão! 7 Modelos de aplicação (Cliente/Servidor e Peer-to-Peer) Velho! Kazaa Cliente Cliente poderoso Cliente

8 A rede... uma breve revisão! 8 Modelos de aplicação (Cliente/Servidor e Peer-to-Peer) GnuTella (jogos...) Cliente Cliente Cliente

9 9 Cliente/Servidor de repetição (echo client/server) O cliente envia uma que é repetida de volta. Mensagem Cliente Mensagem Servidor

10 10 Cliente/Servidor de repetição (echo client/server) O cliente envia uma que é repetida de volta. Os fontes estão no site, tanto para TCP quanto para UDP!!! Vamos executar em sala de aula!!! Cliente (tc.c/uc.c) Mensagem Mensagem Servidor (ts.c/us.c)

11 11 Cliente/Servidor UDP Servidor (US.C) socket_servidor = criar_socket(8888) (socket_servidor, ) enviar_ (socket_servidor, IP_cliente, porta_cliente ) Mensagem / Cliente (UC.C) receber_parâmetros() socket_cliente = criar_socket(0) Mensagem / enviar_ (socket_cliente, IP_servidor, porta_servidor, ) (socket_cliente, ) fechar_socket, socket_cliente)

12 12 Cliente/Servidor UDP Servidor (US.C) socket_servidor = criar_socket(8888) CABEÇALHO Mensagem / Cliente (UC.C) receber_parâmetros() socket_cliente = criar_socket(0) (socket_servidor, ) enviar_ (socket_servidor, IP_cliente, porta_cliente ) Mensagem / enviar_ (socket_cliente, IP_servidor, porta_servidor, ) (socket_cliente, ) fechar_socket, socket_cliente)

13 13 Cliente/Servidor UDP (Servidor - cabeçalho) // No codeblocks (Windows) inclua no menu em: Project -> // Build Options...-> Linker settings -> Other link options: // -l wsock32 // Se for no Linux comente essa linha e compile no terminal: // gcc -o us us.c #define WIN #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #ifdef WIN #include <winsock2.h> #else #include <sys/socket.h> #include <arpa/inet.h> #endif #define TAM_MENSAGEM 255 /* de maior tamanho */ #define PORTA_SERVIDOR_UDP 8888

14 14 Cliente/Servidor UDP Servidor (US.C) socket_servidor = criar_socket(8888) MAIN() Mensagem / Cliente (UC.C) receber_parâmetros() socket_cliente = criar_socket(0) (socket_servidor, ) enviar_ (socket_servidor, IP_cliente, porta_cliente ) Mensagem / enviar_ (socket_cliente, IP_servidor, porta_servidor, ) (socket_cliente, ) fechar_socket, socket_cliente)

15 15 Cliente/Servidor UDP (Servidor main - variáveis) int main() { /* Socket */ int sock; /* Resultado das funções */ int resultado; /* Endereço do Cliente */ struct sockaddr_in endereco; /* Buffer para a recepção da string de echo */ char [TAM_MENSAGEM]; #ifdef WIN /* Início do ambiente Windows */ WORD wpackedvalues; WSADATA SocketInfo; int nlasterror, nversionminor = 1, nversionmajor = 1; wpackedvalues = (WORD)(((WORD)nVersionMinor)<< 8) (WORD)nVersionMajor; nlasterror = WSAStartup(wPackedValues, &SocketInfo); #endif

16 16 Cliente/Servidor UDP (Servidor main cont.) sock = criar_socket(porta_servidor_udp); if (sock < 0) {printf("\nerro na criação do socket!\n");return(1);} for (;;) /* Loop eterno */ { /* Recebe do cliente */ resultado = (,sock,&endereco); if (resultado < 0) {printf("\nerro no recebimento da \n");return(1);} /* Devolve a para o cliente */ resultado = enviar_(,sock,&endereco); if (resultado < 0) {printf("\nerro no envio da \n");return(1);} } /* não passa por aqui */ }

17 17 Cliente/Servidor UDP Servidor (US.C) socket_servidor = criar_socket(8888) (socket_servidor, ) enviar_ (socket_servidor, IP_cliente, porta_cliente ) Mensagem / Cliente (UC.C) receber_parâmetros() socket_cliente = criar_socket(0) Mensagem / enviar_ (socket_cliente, IP_servidor, porta_servidor, ) (socket_cliente, ) fechar_socket, socket_cliente)

18 18 Cliente/Servidor UDP (Servidor criar_socket) int criar_socket(int porta) { int sock; /* Socket para retornar */ struct sockaddr_in endereco; /* Endereço Local */ /* Criação do socket datagrama/udp para recepção e envio de pacotes */ if ((sock = socket(pf_inet, SOCK_DGRAM, IPPROTO_UDP)) < 0) {printf("\nerro na criação do socket!\n");fflush(stdout);return(-1);} /* Se precisar de uma porta específica */ if (porta > 0) { /* Construção da estrutura de endereço local */ /* Zerar a estrutura */ memset(&endereco, 0, sizeof(endereco)); /* Família de endereçamento da Internet */ endereco.sin_family = AF_INET; /* Qualquer interface de entrada */ endereco.sin_addr.s_addr = htonl(inaddr_any); /* Porta local */ endereco.sin_port = htons(porta); /* Instanciar o endereco local */ if (bind(sock, (struct sockaddr *) &endereco, sizeof(endereco)) < 0) {printf("\nerro no bind()!\n");fflush(stdout);return(-1);} } return(sock); } // socket(int socket_family, int socket_type, int protocol);

19 19 Cliente/Servidor UDP Servidor (US.C) socket_servidor = criar_socket(8888) (socket_servidor, ) enviar_ (socket_servidor, IP_cliente, porta_cliente ) Mensagem / Cliente (UC.C) receber_parâmetros() socket_cliente = criar_socket(0) Mensagem / enviar_ (socket_cliente, IP_servidor, porta_servidor, ) (socket_cliente, ) fechar_socket, socket_cliente)

20 20 Cliente/Servidor UDP (Servidor ) int (char *,int sock, struct sockaddr_in *endereco) { /* Define o tamanho do endereço de recepção e envio */ int tamanho_endereco = sizeof(struct sockaddr_in); /* Limpar o buffer da */ memset((void *),(int) NULL,TAM_MENSAGEM); /* Espera pela recepção de alguma de algum cliente */ if (recvfrom(sock,, TAM_MENSAGEM - 1, 0, (struct sockaddr *) endereco, &tamanho_endereco) < 0) { printf("\nerro na recepção da \n");fflush(stdout); return(-1); } printf("\nudp Servidor: Recebi (%s)\n",);fflush(stdout); return(0); } // ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);

21 21 Cliente/Servidor UDP Servidor (US.C) socket_servidor = criar_socket(8888) (socket_servidor, ) enviar_ (socket_servidor, IP_cliente, porta_cliente ) Mensagem / Cliente (UC.C) receber_parâmetros() socket_cliente = criar_socket(0) Mensagem / enviar_ (socket_cliente, IP_servidor, porta_servidor, ) (socket_cliente, ) fechar_socket, socket_cliente)

22 22 Cliente/Servidor UDP (Servidor enviar_) int enviar_(char *,int sock, struct sockaddr_in *endereco) { /* Devolve o conteúdo do datagrama para o cliente */ if (sendto(sock,, strlen(), 0, (struct sockaddr *) endereco, sizeof(struct sockaddr))!= strlen()) { printf("\nerro no envio da \n"); return(-1); } printf("\nudp Servidor: Enviei (%s)\n",); return(0); } //ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);

23 23 Cliente/Servidor UDP Servidor (US.C) socket_servidor = criar_socket(8888) CABEÇALHO Mensagem / Cliente (UC.C) receber_parâmetros() socket_cliente = criar_socket(0) (socket_servidor, ) enviar_ (socket_servidor, IP_cliente, porta_cliente ) Mensagem / enviar_ (socket_cliente, IP_servidor, porta_servidor, ) (socket_cliente, ) fechar_socket, socket_cliente)

24 24 Cliente/Servidor UDP (Cliente - cabeçalho) // No codeblocks (Windows) inclua no menu em: Project -> // Build Options...-> Linker settings -> Other link options: // -l wsock32 // Se for no Linux comente essa linha e compile no terminal: // gcc -o uc uc.c #define WIN #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #ifdef WIN #include <winsock2.h> #else #include <sys/socket.h> #include <arpa/inet.h> #endif #define TAM_MENSAGEM 255 /* de maior tamanho */ #define PORTA_SERVIDOR_UDP 8888

25 25 Cliente/Servidor UDP Servidor (US.C) socket_servidor = criar_socket(8888) MAIN() Mensagem / Cliente (UC.C) receber_parâmetros() socket_cliente = criar_socket(0) (socket_servidor, ) enviar_ (socket_servidor, IP_cliente, porta_cliente ) Mensagem / enviar_ (socket_cliente, IP_servidor, porta_servidor, ) (socket_cliente, ) fechar_socket, socket_cliente)

26 26 Cliente/Servidor UDP (Cliente main - variáveis) int main(int argc, char **argv) { /* Socket */ int sock; /* Resultado das funções */ int resultado; /* IP do servidor */ char IP[TAM_MENSAGEM]; /* Buffer para a recepção da string de echo */ char [TAM_MENSAGEM]; #ifdef WIN /* Início do ambiente Windows */ WORD wpackedvalues; WSADATA SocketInfo; int nlasterror, nversionminor = 1, nversionmajor = 1; wpackedvalues = (WORD)(((WORD)nVersionMinor)<< 8) (WORD)nVersionMajor; nlasterror = WSAStartup(wPackedValues, &SocketInfo); #endif

27 27 Cliente/Servidor UDP Servidor (US.C) MAIN() Cliente (UC.C) socket_servidor = criar_socket(8888) (socket_servidor, ) Mensagem / receber_parâmetros() socket_cliente = criar_socket(0) Mensagem / enviar_ (socket_cliente, IP_servidor, porta_servidor, ) enviar_ (socket_servidor, IP_cliente, porta_cliente ) (socket_cliente, ) fechar_socket, socket_cliente)

28 28 Cliente/Servidor UDP (Cliente main - Parâmetros) /* Parâmetros - INICIO */ /* Testa se o número de parâmetros está correto */ if (argc!= 3) { printf("uso: %s <> <Palavra de Echo>\n", argv[0]); Return(1); /* exemplo: uc oi */ /* exemplo: uc oi estou aqui */ } memset((void *) IP,(int) NULL,TAM_MENSAGEM); strcpy(ip,argv[1]); /* (local ) */ memset((void *),(int) NULL,TAM_MENSAGEM); strcpy(,argv[2]); /* Mensagem */ /* Parâmetros - FINAL */

29 29 Cliente/Servidor UDP Servidor (US.C) socket_servidor = criar_socket(8888) MAIN() Mensagem / Cliente (UC.C) receber_parâmetros() socket_cliente = criar_socket(0) (socket_servidor, ) enviar_ (socket_servidor, IP_cliente, porta_cliente ) Mensagem / enviar_ (socket_cliente, IP_servidor, porta_servidor, ) (socket_cliente, ) fechar_socket, socket_cliente)

30 30 Cliente/Servidor UDP (Cliente main -cont.) sock = criar_socket(0); if (sock < 0) {printf("\nerro na criação do socket!\n");return(1);} /* Envia para o servidor */ resultado = enviar_(,sock,ip); if (resultado < 0) {printf("\nerro no envio da \n");return(1);} /* Recebe do servidor */ resultado = (sock); if (resultado < 0) {printf("\nerro no recebimento da \n");return(1);} /* Fecha o socket e retorna */ close(sock); return(0); }

31 31 Cliente/Servidor UDP Servidor (US.C) socket_servidor = criar_socket(8888) (socket_servidor, ) enviar_ (socket_servidor, IP_cliente, porta_cliente ) Mensagem / Cliente (UC.C) receber_parâmetros() socket_cliente = criar_socket(0) Mensagem / enviar_ (socket_cliente, IP_servidor, porta_servidor, ) (socket_cliente, ) fechar_socket, socket_cliente)

32 32 Cliente/Servidor UDP (Cliente criar_socket =) int criar_socket(int porta) { int sock; /* Socket para retornar */ struct sockaddr_in endereco; /* Endereço Local */ /* Criação do socket datagrama/udp para recepção e envio de pacotes */ if ((sock = socket(pf_inet, SOCK_DGRAM, IPPROTO_UDP)) < 0) {printf("\nerro na criação do socket!\n");fflush(stdout);return(-1);} /* Se precisar de uma porta específica */ if (porta > 0) { /* Construção da estrutura de endereço local */ /* Zerar a estrutura */ memset(&endereco, 0, sizeof(endereco)); /* Família de endereçamento da Internet */ } endereco.sin_family = AF_INET; /* Qualquer interface de entrada */ endereco.sin_addr.s_addr = htonl(inaddr_any); endereco.sin_port = htons(porta); /* Porta local */ /* Instanciar o endereco local */ if (bind(sock, (struct sockaddr *) &endereco, sizeof(endereco)) < 0) {printf("\nerro no bind()!\n");fflush(stdout);return(-1);} } return(sock);

33 33 Cliente/Servidor UDP Servidor (US.C) socket_servidor = criar_socket(8888) (socket_servidor, ) enviar_ (socket_servidor, IP_cliente, porta_cliente ) Mensagem / Cliente (UC.C) receber_parâmetros() socket_cliente = criar_socket(0) Mensagem / enviar_ (socket_cliente, IP_servidor, porta_servidor, ) (socket_cliente, ) fechar_socket, socket_cliente)

34 34 Cliente/Servidor UDP (Cliente enviar_) int enviar_(char *,int sock,char *IP) { struct sockaddr_in endereco; /* Endereço do Servidor */ /* Construção da estrutura de endereço do servidor */ /* Zerar a estrutura */ memset(&endereco, 0, sizeof(endereco)); } /* Família de endereçamento da Internet */ endereco.sin_family = AF_INET; /* Endereço IP do Servidor */ endereco.sin_addr.s_addr = inet_addr(ip); /* Porta do Servidor */ endereco.sin_port = htons(porta_servidor_udp); /* Enviar para o servidor */ if (sendto(sock,, strlen(), 0, (struct sockaddr *) &endereco, sizeof(struct sockaddr_in))!= strlen()) {printf("\nerro no envio da \n");return(-1);} printf("\nudp Cliente: Enviei (%s)\n",); return(0);

35 35 Cliente/Servidor UDP Servidor (US.C) socket_servidor = criar_socket(8888) (socket_servidor, ) enviar_ (socket_servidor, IP_cliente, porta_cliente ) Mensagem / Cliente (UC.C) receber_parâmetros() socket_cliente = criar_socket(0) Mensagem / enviar_ (socket_cliente, IP_servidor, porta_servidor, ) (socket_cliente, ) fechar_socket, socket_cliente)

36 36 Cliente/Servidor UDP (Cliente ) int (int sock) { /* Buffer para a recepção da string de echo */ char [TAM_MENSAGEM]; struct sockaddr_in endereco; /* Endereço do Servidor */ /* Define o tamanho do endereço de recepção e envio */ int tamanho_endereco = sizeof(struct sockaddr_in); /* Limpar o buffer da */ memset((void *),(int) NULL,TAM_MENSAGEM); /* Espera pela recepção de alguma de algum cliente */ if (recvfrom(sock,, TAM_MENSAGEM - 1, 0, (struct sockaddr *) &endereco, &tamanho_endereco) < 0) { printf("\nerro na recepção da \n");fflush(stdout); return(-1); } printf("\nudp Cliente: Recebi (%s)\n",);fflush(stdout); return(0); }

37 37 Cliente/Servidor TCP Servidor (TS.C) / Cliente (TC.C) sock = criar_socket(9999) Receber parâmetros sock = criar_socket(0) socket_cliente = aceitar_conexao(sock) (,socket_cliente) enviar_ (,socket_cliente) conexão conectar_com_servidor (sock,ip,9999) enviar_ (,sock) (,sock)

38 38 Cliente/Servidor TCP Servidor (TS.C) CABEÇALHO / Cliente (TC.C) sock = criar_socket(9999) Receber parâmetros sock = criar_socket(0) socket_cliente = aceitar_conexao(sock) (,socket_cliente) enviar_ (,socket_cliente) conexão conectar_com_servidor (sock,ip,9999) enviar_ (,sock) (,sock)

39 39 Cliente/Servidor TCP (Servidor - cabeçalho) // No codeblocks (Windows) inclua no menu em: Project -> // Build Options...-> Linker settings -> Other link options: // -l wsock32 // Se for no Linux comente essa linha e compile no terminal: // gcc -o ts ts.c #define WIN #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #ifdef WIN #include <winsock2.h> #else #include <sys/socket.h> #include <arpa/inet.h> #endif #define TAM_MENSAGEM 255 /* de maior tamanho */ /* Número máximo de requisições para conexão pendentes */ #define MAXPENDING 5 #define PORTA_SERVIDOR_TCP 9999

40 40 Cliente/Servidor TCP Servidor (TS.C) MAIN() / Cliente (TC.C) sock = criar_socket(9999) Receber parâmetros sock = criar_socket(0) socket_cliente = aceitar_conexao(sock) (,socket_cliente) enviar_ (,socket_cliente) conexão conectar_com_servidor (sock,ip,9999) enviar_ (,sock) (,sock)

41 41 Cliente/Servidor TCP (Servidor main - variáveis) int main() { /* Socket */ int sock; /* Socket da conexão com o cliente */ int socket_cliente; /* Resultado das funções */ int resultado; /* Buffer para a recepção da string de echo */ char [TAM_MENSAGEM]; #ifdef WIN /* Início do ambiente Windows */ WORD wpackedvalues; WSADATA SocketInfo; int nlasterror, nversionminor = 1, nversionmajor = 1; wpackedvalues = (WORD)(((WORD)nVersionMinor)<< 8) (WORD)nVersionMajor; nlasterror = WSAStartup(wPackedValues, &SocketInfo); #endif

42 42 Cliente/Servidor TCP Servidor (TS.C) MAIN() / Cliente (TC.C) sock = criar_socket(9999) Receber parâmetros sock = criar_socket(0) socket_cliente = aceitar_conexao(sock) (,socket_cliente) enviar_ (,socket_cliente) conexão conectar_com_servidor (sock,ip,9999) enviar_ (,sock) (,sock)

43 43 Cliente/Servidor TCP (Servidor main cont.) sock = criar_socket(porta_servidor_tcp); if (sock < 0){printf("\nErro na criação do socket!\n");return(1);} for (;;) /* Loop eterno */ { /* Aguarda por uma conexão e a aceita criando o socket de contato com o cliente */ socket_cliente = aceitar_conexao(sock); if (socket_cliente == 0) {printf("\nerro na conexao do socket!\n");return(1);} /* Recebe a do cliente */ resultado = (,socket_cliente); if (resultado < 0) {printf("\nerro no recebimento da \n");return(1);} /* Devolve o conteúdo da para o cliente */ resultado = enviar_(,socket_cliente); if (resultado < 0) {printf("\nerro no envio da \n");return(1);} close(socket_cliente); /* Fecha o socket do cliente */ } /* não passa por aqui */ }

44 44 Cliente/Servidor TCP Servidor (TS.C) / Cliente (TC.C) sock = criar_socket(9999) Receber parâmetros sock = criar_socket(0) socket_cliente = aceitar_conexao(sock) (,socket_cliente) enviar_ (,socket_cliente) conexão conectar_com_servidor (sock,ip,9999) enviar_ (,sock) (,sock)

45 45 Cliente/Servidor TCP (Servidor criar_socket) int criar_socket(int porta) { int sock; struct sockaddr_in endereco; /* Endereço Local */ /* Criação do socket TCP para recepção e envio de pacotes */ if ((sock = socket(pf_inet, SOCK_STREAM, 0)) < 0) {printf("\nerro na criação do socket!\n");return(-1);} if (porta > 0) { /* Construção da estrutura de endereço local */ memset(&endereco, 0, sizeof(endereco)); /* Zerar a estrutura */ /* Família de endereçamento da Internet */ } endereco.sin_family = AF_INET; /* Qualquer interface de entrada */ endereco.sin_addr.s_addr = htonl(inaddr_any); endereco.sin_port = htons(porta); /* Porta local */ /* Instanciar o endereco local */ if (bind(sock, (struct sockaddr *) &endereco, sizeof(endereco)) < 0) {printf("\nerro no bind()!\n");return(-1);} /* Indica que o socket escutara as conexões */ if (listen(sock, MAXPENDING) < 0) {printf("\nerro no listen()!\n");return(-1);} } return(sock);

46 46 Cliente/Servidor TCP Servidor (TS.C) / Cliente (TC.C) sock = criar_socket(9999) Receber parâmetros sock = criar_socket(0) socket_cliente = aceitar_conexao(sock) (,socket_cliente) enviar_ (,socket_cliente) conexão conectar_com_servidor (sock,ip,9999) enviar_ (,sock) (,sock)

47 47 Cliente/Servidor TCP (Servidor aceitar_conexao) int aceitar_conexao(int sock) { int socket_cliente; struct sockaddr_in endereco; /* Endereço Local */ int tamanho_endereco; /* Define o tamanho do endereço de recepção e envio */ tamanho_endereco = sizeof(endereco); } /* Aguarda pela conexão de um cliente */ if ((socket_cliente = accept(sock, (struct sockaddr *) &endereco, &tamanho_endereco)) < 0) { printf("\nerro no accept()!\n");fflush(stdout); return(0); } return(socket_cliente);

48 48 Cliente/Servidor TCP Servidor (TS.C) / Cliente (TC.C) sock = criar_socket(9999) Receber parâmetros sock = criar_socket(0) socket_cliente = aceitar_conexao(sock) (,socket_cliente) enviar_ (,socket_cliente) conexão conectar_com_servidor (sock,ip,9999) enviar_ (,sock) (,sock)

49 49 Cliente/Servidor TCP (Servidor ) int (char *,int sock) { /* Limpar o buffer da */ memset((void *),(int) NULL,TAM_MENSAGEM); /* Espera pela recepção de alguma do cliente conectado */ if (recv(sock,, TAM_MENSAGEM, 0) < 0) { printf("\nerro na recepção da \n"); return(-1); } printf("\ntcp Servidor: Recebi (%s)\n",); return(0); } // ssize_t recv(int sockfd, void *buf, size_t len, int flags);

50 50 Cliente/Servidor TCP Servidor (TS.C) / Cliente (TC.C) sock = criar_socket(9999) Receber parâmetros sock = criar_socket(0) socket_cliente = aceitar_conexao(sock) (,socket_cliente) enviar_ (,socket_cliente) conexão conectar_com_servidor (sock,ip,9999) enviar_ (,sock) (,sock)

51 51 Cliente/Servidor TCP (Servidor enviar_) int enviar_(char *,int sock) { /* Devolve o conteúdo da para o cliente */ if (send(sock,, strlen(), 0)!= strlen()) { printf("\nerro no envio da \n"); return(-1); } printf("\ntcp Servidor: Enviei (%s)\n",); } return(0); // ssize_t send(int sockfd, const void *buf, size_t len, int flags);

52 52 Cliente/Servidor TCP Servidor (TS.C) CABEÇALHO / Cliente (TC.C) sock = criar_socket(9999) Receber parâmetros sock = criar_socket(0) socket_cliente = aceitar_conexao(sock) (,socket_cliente) enviar_ (,socket_cliente) conexão conectar_com_servidor (sock,ip,9999) enviar_ (,sock) (,sock)

53 53 Cliente/Servidor TCP (Cliente - cabeçalho) // No codeblocks (Windows) inclua no menu em: Project -> // Build Options...-> Linker settings -> Other link options: // -l wsock32 // Se for no Linux comente essa linha e compile no terminal: // gcc -o tc tc.c #define WIN #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #ifdef WIN #include <winsock2.h> #else #include <sys/socket.h> #include <arpa/inet.h> #endif #define TAM_MENSAGEM 255 /* de maior tamanho */ /* Número máximo de requisições para conexão pendentes */ #define MAXPENDING 5 #define PORTA_SERVIDOR_TCP 9999

54 54 Cliente/Servidor TCP Servidor (TS.C) / Cliente (TC.C) MAIN() sock = criar_socket(9999) Receber parâmetros sock = criar_socket(0) socket_cliente = aceitar_conexao(sock) (,socket_cliente) enviar_ (,socket_cliente) conexão conectar_com_servidor (sock,ip,9999) enviar_ (,sock) (,sock)

55 55 Cliente/Servidor TCP (Cliente main - variáveis) int main(int argc, char **argv) { /* Socket */ int sock; /* Resultado das funções */ int resultado; /* Buffer para a recepção da string de echo */ char [TAM_MENSAGEM]; /* Endereço IP do Servidor */ char IP[TAM_MENSAGEM]; #ifdef WIN /* Início do ambiente Windows */ WORD wpackedvalues; WSADATA SocketInfo; int nlasterror, nversionminor = 1, nversionmajor = 1; wpackedvalues = (WORD)(((WORD)nVersionMinor)<< 8) (WORD)nVersionMajor; nlasterror = WSAStartup(wPackedValues, &SocketInfo); #endif

56 56 Cliente/Servidor TCP Servidor (TS.C) sock = criar_socket(9999) / Cliente (TC.C) Receber parâmetros sock = criar_socket(0) MAIN() socket_cliente = aceitar_conexao(sock) (,socket_cliente) enviar_ (,socket_cliente) conexão conectar_com_servidor (sock,ip,9999) enviar_ (,sock) (,sock)

57 57 Cliente/Servidor TCP (Cliente main - parâmetros) /* Parâmetros - INICIO */ /* Testa se o número de parâmetros está correto */ if (argc!= 3) { printf("uso: %s <> <Palavra de Echo>\n", argv[0]); return(1);/* exemplo: tc oi */ /* exemplo: tc oi estou aqui */ } memset((void *) IP,(int) NULL,TAM_MENSAGEM); strcpy(ip,argv[1]); /* */ memset((void *),(int) NULL,TAM_MENSAGEM); strcpy(,argv[2]); /* Parâmetros - FINAL */

58 58 Cliente/Servidor TCP Servidor (TS.C) / Cliente (TC.C) MAIN() sock = criar_socket(9999) Receber parâmetros sock = criar_socket(0) socket_cliente = aceitar_conexao(sock) (,socket_cliente) enviar_ (,socket_cliente) conexão conectar_com_servidor (sock,ip,9999) enviar_ (,sock) (,sock)

59 59 Cliente/Servidor TCP (Cliente main cont.) /* Criação do socket */ sock = criar_socket(0); if (sock < 0) {printf("\nerro na criação do socket!\n");return(1);} /* Estabelecer conexão com o servidor */ resultado = conectar_com_servidor(sock,ip,porta_servidor_tcp); if (resultado < 0) {printf("\nerro no recebimento da \n");return(1);} /* Enviar para o servidor */ resultado = enviar_(,sock); if (resultado < 0) {printf("\nerro no envio da \n");return(1);} /* Recebendo como resposta a mesma string vinda do servidor */ resultado = (,sock); if (resultado < 0) {printf("\nerro no recebimento da \n");return(1);} /* Fechar socket */ close(sock); return(0); }

60 60 Cliente/Servidor TCP Servidor (TS.C) / Cliente (TC.C) sock = criar_socket(9999) Receber parâmetros sock = criar_socket(0) socket_cliente = aceitar_conexao(sock) (,socket_cliente) enviar_ (,socket_cliente) conexão conectar_com_servidor (sock,ip,9999) enviar_ (,sock) (,sock)

61 61 Cliente/Servidor TCP (Cliente criar_socket) int criar_socket(int porta) { int sock; struct sockaddr_in endereco; /* Endereço Local */ /* Criação do socket TCP para recepção e envio de pacotes */ if ((sock = socket(pf_inet, SOCK_STREAM, 0)) < 0) {printf("\nerro na criação do socket!\n");return(-1);} if (porta > 0) { /* Construção da estrutura de endereço local */ /* Zerar a estrutura */ memset(&endereco, 0, sizeof(endereco)); /* Família de endereçamento da Internet */ endereco.sin_family = AF_INET; /* Qualquer interface de entrada */ endereco.sin_addr.s_addr = htonl(inaddr_any); endereco.sin_port = htons(porta); /* Porta local */ /* Instanciar o endereco local */ if (bind(sock, (struct sockaddr *) &endereco, sizeof(endereco)) < 0) {printf("\nerro no bind()!\n");return(-1);} /* Indica que o socket escutara as conexões */ if (listen(sock, MAXPENDING) < 0) {printf("\nerro no listen()!\n");return(-1);} } return(sock); }

62 62 Cliente/Servidor TCP Servidor (TS.C) / Cliente (TC.C) sock = criar_socket(9999) Receber parâmetros sock = criar_socket(0) socket_cliente = aceitar_conexao(sock) (,socket_cliente) enviar_ (,socket_cliente) conexão conectar_com_servidor (sock,ip,9999) enviar_ (,sock) (,sock)

63 63 Cliente/Servidor TCP (Cliente - conectar_com_servidor) int conectar_com_servidor(int sock,char *IP,int porta) { struct sockaddr_in endereco; /* Endereço Local */ /* Construção da estrutura de endereço do servidor */ /* Zerar a estrutura */ memset(&endereco, 0, sizeof(endereco)); /* Família de endereçamento da Internet */ endereco.sin_family = AF_INET; /* Endereço IP do Servidor */ endereco.sin_addr.s_addr = inet_addr(ip); /* Porta do Servidor */ endereco.sin_port = htons(porta); /* Estabelecimento da conexão com o servidor de echo */ if (connect(sock, (struct sockaddr *) &endereco, sizeof(endereco)) < 0) {printf("\nerro no connect()!\n");fflush(stdout);return(-1);} return(0); }

64 64 Cliente/Servidor TCP Servidor (TS.C) / Cliente (TC.C) sock = criar_socket(9999) Receber parâmetros sock = criar_socket(0) socket_cliente = aceitar_conexao(sock) (,socket_cliente) enviar_ (,socket_cliente) conexão conectar_com_servidor (sock,ip,9999) enviar_ (,sock) (,sock)

65 65 Cliente/Servidor TCP (Cliente - enviar_) int enviar_(char *,int sock) { /* Envia o conteúdo da para o cliente */ if (send(sock,, strlen(), 0)!= strlen()) { printf("\nerro no envio da \n"); return(-1); } printf("\ntcp Cliente: Enviei (%s)\n",); } return(0);

66 66 Cliente/Servidor TCP Servidor (TS.C) / Cliente (TC.C) sock = criar_socket(9999) Receber parâmetros sock = criar_socket(0) socket_cliente = aceitar_conexao(sock) (,socket_cliente) enviar_ (,socket_cliente) conexão conectar_com_servidor (sock,ip,9999) enviar_ (,sock) (,sock)

67 67 Cliente/Servidor TCP (Cliente - ) int (char *,int sock) { /* Limpar o buffer da */ memset((void *),(int) NULL,TAM_MENSAGEM); /* Espera pela recepção de alguma do cliente conectado*/ if (recv(sock,, TAM_MENSAGEM, 0) < 0) { printf("\nerro na recepção da \n"); return(-1); } printf("\ntcp Cliente: Recebi (%s)\n",); } return(0);

68 68 Vamos experimentar esses programas Cliente/Servidor TCP e UDP em sala! Tranquilos? Dúvidas?

69 Tópicos Especiais Aula 05 - desenvolvimento com sockets - FIM

Leandro Soares de Sousa (DSc.) Página: Parte III

Leandro Soares de Sousa (DSc.)   Página:   Parte III Tópicos Especiais em Sistemas Computacionais Leandro Soares de Sousa (DSc.) e-mail: leandro.uff.puro@gmail.com Página: http://www.ic.uff.br/~lsousa Parte III Mais e mais ferramentas! 2 Aplicações distribuídas:

Leia mais

Capítulo 2. Camada de aplicação

Capítulo 2. Camada de aplicação 1 Capítulo 2 Camada de aplicação 2 Redes de computadores I Prof.: Leandro Soares de Sousa E-mail: leandro.uff.puro@gmail.com Site: http://www.ic.uff.br/~lsousa Não deixem a matéria acumular!!! Datas das

Leia mais

Programação com Sockets TCP e UDP - Cliente. Gustavo Leitão

Programação com Sockets TCP e UDP - Cliente. Gustavo Leitão Programação com Sockets TCP e UDP - Cliente Gustavo Leitão 5/24/2010 INTRODUÇÃO Objetivo da Aula OBJETIVO DA AULA Apresentar ao aluno conceitos e prática em sockets INTRODUÇÃO O que é um socket? INTRODUÇÃO

Leia mais

Aula de Socket. Rafael De Tommaso do Valle

Aula de Socket. Rafael De Tommaso do Valle Aula de Socket Rafael De Tommaso do Valle 20 de agosto de 2009 Socket O que é um socket? É uma interface com qual processos em diferentes hosts se comunicam através da rede; Também chamado de interface

Leia mais

Servidor TCP. Programação Sockets. (c) Volnys Bernal. Servidor TCP Resumo das Chamadas TCP. Resumo das Chamadas TCP. Resumo das Chamadas TCP

Servidor TCP. Programação Sockets. (c) Volnys Bernal. Servidor TCP Resumo das Chamadas TCP. Resumo das Chamadas TCP. Resumo das Chamadas TCP 2004-2016 Volnys Bernal 1 2004-2016 Volnys Bernal 2 Resumo das Chamadas TCP Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos Escola Politécnica da USP Resumo das Chamadas TCP

Leia mais

Servidor TCP. Programação Sockets. (c) Volnys Bernal. Servidor TCP Resumo das Chamadas TCP. Resumo das Chamadas TCP. Resumo das Chamadas TCP

Servidor TCP. Programação Sockets. (c) Volnys Bernal. Servidor TCP Resumo das Chamadas TCP. Resumo das Chamadas TCP. Resumo das Chamadas TCP 2004-2013 Volnys Bernal 1 2004-2013 Volnys Bernal 2 Resumo das Chamadas TCP Volnys Borges Bernal volnys@lsi.usp.br http://www.lsi.usp.br/~volnys 2004-2013 Volnys Bernal 3 2004-2013 Volnys Bernal 4 Resumo

Leia mais

Servidor TCP. Programação Sockets. (c) Volnys Bernal. Servidor TCP Resumo das Chamadas TCP. Resumo das Chamadas TCP. Resumo das Chamadas TCP

Servidor TCP. Programação Sockets. (c) Volnys Bernal. Servidor TCP Resumo das Chamadas TCP. Resumo das Chamadas TCP. Resumo das Chamadas TCP 2004-2013 Volnys Bernal 1 2004-2013 Volnys Bernal 2 Volnys Borges Bernal volnys@lsi.usp.br http://www.lsi.usp.br/~volnys 2004-2013 Volnys Bernal 3 2004-2013 Volnys Bernal 4 Lado Cliente Lado Servidor sd1

Leia mais

Por Fernando Koyanagi

Por Fernando Koyanagi Por Fernando Koyanagi Recursos usados 18 jumpers fêmea x fêmea Módulo de 16 relés com optoacoplador Raspberry Pi 3 Rede interna (TCP/IP) Intenção dessa aula 1. Iniciar automação com Raspberry Pi PI 2.

Leia mais

Servidor UDP Volnys Borges Bernal Departamento de Sistemas Eletrônicos Escola Politécnica da USP

Servidor UDP Volnys Borges Bernal Departamento de Sistemas Eletrônicos Escola Politécnica da USP 2004-2017 Volnys Bernal 1 Servidor UDP Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos Escola Politécnica da USP 2004-2017 Volnys Bernal 2 Resumo das Chamadas UDP 2004-2017

Leia mais

Servidor UDP. Programação Sockets Volnys Bernal. Servidor UDP Resumo das Chamadas UDP. Resumo de Chamadas UDP. Resumo de Chamadas UDP

Servidor UDP. Programação Sockets Volnys Bernal. Servidor UDP Resumo das Chamadas UDP. Resumo de Chamadas UDP. Resumo de Chamadas UDP 2004-2015 Volnys Bernal 1 2004-2015 Volnys Bernal 2 Resumo das Chamadas UDP Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos Escola Politécnica da USP 2004-2015 Volnys Bernal

Leia mais

TROCA DE MENSAGENS SOCKETS. Comunicando processos através de SOCKETS. SOCKETS com conexão. SOCKETS sem conexão

TROCA DE MENSAGENS SOCKETS. Comunicando processos através de SOCKETS. SOCKETS com conexão. SOCKETS sem conexão TROCA DE MENSAGENS SOCKETS Comunicando processos através de SOCKETS SOCKETS com conexão SOCKETS sem conexão SOCKETS Princípios dos sockets: 2. Fornecer uma interface geral permitindo a construção de aplicações

Leia mais

Cliente UDP. Programação sockets. Agenda. Cliente UDP. Resumo de Chamadas UDP. Chamadas UDP. Resumo de Chamadas UDP.

Cliente UDP. Programação sockets. Agenda. Cliente UDP. Resumo de Chamadas UDP. Chamadas UDP. Resumo de Chamadas UDP. 2002-2004 Volnys Bernal 1 2002-2004 Volnys Bernal 2 Agenda Volnys Borges Bernal volnys@lsi.usp.br http://www.lsi.usp.br/~volnys Resumo de Chamadas UDP Chamada connect() Chamada send() Chamada sendto()

Leia mais

Sumário. Introdução ao TCP/IP e à Internet API Sockets para comunicação via redes Exemplos

Sumário. Introdução ao TCP/IP e à Internet API Sockets para comunicação via redes Exemplos Sumário Introdução ao TCP/IP e à Internet API Sockets para comunicação via redes Exemplos A Internet: Endereços Cada computador ligado à Internet tem um endereço único que o distingue dos restantes (endereço

Leia mais

Leandro Soares de Sousa (DSc.) Página: Aula 04 - desenvolvimento multithread

Leandro Soares de Sousa (DSc.)   Página:   Aula 04 - desenvolvimento multithread Tópicos Especiais Leandro Soares de Sousa (DSc.) e-mail: lsousa@id.uff.br Página: http://www.ic.uff.br/~lsousa Aula 04 - desenvolvimento multithread Mais e mais ferramentas! 2 Processos e Threads: desenvolvimento

Leia mais

Cliente TCP. Programação sockets. Agenda. Cliente TCP. Chamadas sockets para TCP. Chamada socket() Chamada socket()

Cliente TCP. Programação sockets. Agenda. Cliente TCP. Chamadas sockets para TCP. Chamada socket() Chamada socket() 2002-2009 Volnys Bernal 1 2002-2009 Volnys Bernal 2 Agenda Volnys Borges Bernal volnys@lsi.usp.br http://www.lsi.usp.br/~volnys Resumo das chamadas sockets para TCP Chamada close() 2002-2009 Volnys Bernal

Leia mais

Cliente UDP. Programação sockets. Agenda. Cliente UDP. Resumo de Chamadas UDP. Chamadas UDP. Resumo de Chamadas UDP.

Cliente UDP. Programação sockets. Agenda. Cliente UDP. Resumo de Chamadas UDP. Chamadas UDP. Resumo de Chamadas UDP. 2002-2013 Volnys Bernal 1 2002-2013 Volnys Bernal 2 Agenda Volnys Borges Bernal volnys@lsi.usp.br http://www.lsi.usp.br/~volnys Resumo de Chamadas UDP Chamada Chamada Chamada 2002-2013 Volnys Bernal 3

Leia mais

Aula Prática. Comunicação em SOCKTS. Disciplina: INF01151

Aula Prática. Comunicação em SOCKTS. Disciplina: INF01151 Aula Prática Comunicação em SOCKTS Disciplina: INF01151 Prof. Dr. Cláudio Fernando Resin Geyer Monitor: Julio Anjos Agenda 1 - Objetivo Apresentar na prática a comunicação entre processos usando sockets

Leia mais

Cliente UDP. Programação sockets. Agenda. Cliente UDP. Resumo de Chamadas UDP. Resumo das chamadas UDP. Resumo de Chamadas UDP.

Cliente UDP. Programação sockets. Agenda. Cliente UDP. Resumo de Chamadas UDP. Resumo das chamadas UDP. Resumo de Chamadas UDP. 2002-2015 Volnys Bernal 1 2002-2015 Volnys Bernal 2 Agenda Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos Escola Politécnica da USP Resumo das chamadas sockets para UDP Uso

Leia mais

Leandro Soares de Sousa (DSc.) Página: Parte II

Leandro Soares de Sousa (DSc.)   Página:   Parte II Tópicos Especiais em Sistemas Computacionais Leandro Soares de Sousa (DSc.) e-mail: leandro.uff.puro@gmail.com Página: http://www.ic.uff.br/~lsousa Parte II Mais e mais ferramentas! 2 Processos e Threads:

Leia mais

Comunicação entre Processos

Comunicação entre Processos Comunicação entre Processos Troca de Mensagens send (destino, msg) receive (origem, mensagem) questões semântica de operações especificação de origem e destino formato de mensagem envio síncrono e assíncrono

Leia mais

Servidor TCP Volnys Borges Bernal Depto de Engenharia de Sistemas Eletrônicos Escola Politécnica da USP

Servidor TCP Volnys Borges Bernal Depto de Engenharia de Sistemas Eletrônicos Escola Politécnica da USP 2004-2019 Volnys Bernal 1 Servidor TCP Volnys Borges Bernal Depto de Engenharia de Sistemas Eletrônicos Escola Politécnica da USP 2004-2019 Volnys Bernal 2 Resumo das Chamadas TCP 2004-2019 Volnys Bernal

Leia mais

Programação Orientada a Objetos para Redes de Computadores. Modelo Cliente-Servidor. Comunicação entre Processos. O que é um Socket?

Programação Orientada a Objetos para Redes de Computadores. Modelo Cliente-Servidor. Comunicação entre Processos. O que é um Socket? Programação Orientada a Objetos para Redes de Computadores Prof. Miguel Elias Mitre Campista http://www.gta.ufrj.br/~miguel PARTE 2 Programação em C++ - Sockets Comunicação entre Processos O que é um processo?

Leia mais

Programação Orientada a Objetos para Redes de Computadores

Programação Orientada a Objetos para Redes de Computadores Programação Orientada a Objetos para Redes de Computadores Prof. Miguel Elias Mitre Campista http://www.gta.ufrj.br/~miguel PARTE 2 Programação em C++ - Sockets Comunicação entre Processos O que é um processo?

Leia mais

Introdução à Programação com Sockets. Fernando Jorge Silveira Filho Daniel Sadoc Menasché

Introdução à Programação com Sockets. Fernando Jorge Silveira Filho Daniel Sadoc Menasché Introdução à Programação com Sockets Fernando Jorge Silveira Filho fernando@land.ufrj.br Daniel Sadoc Menasché sadoc@land.ufrj.br Visão Geral Objetivos: Realizar comunicação entre processos. Entender como

Leia mais

Programação em Sockets visando verificar a diferença entre transmissão confiável (TCP) e não confiável (UDP)

Programação em Sockets visando verificar a diferença entre transmissão confiável (TCP) e não confiável (UDP) II - UFRGS Programação em Sockets visando verificar a diferença entre transmissão confiável (TCP) e não confiável (UDP) Valter Roesler Universidade Federal do Rio Grande do Sul (UFRGS) Instituto de Informática

Leia mais

MC823 Atividade 1: Cliente/Servidor TCP Iterativo. 3 Modificando o servidor para retornar data e hora

MC823 Atividade 1: Cliente/Servidor TCP Iterativo. 3 Modificando o servidor para retornar data e hora MC823 Atividade 1: Cliente/Servidor TCP Iterativo Gustavo Sverzut Barbieri 1 Introdução Nessa atividade nós modificamos cliente e servidor simples que utilizam o protocolo TCP/IP.

Leia mais

Soquetes TCP. Jean Ribeiro Damasceno. Escola de Engenharia Universidade Federal Fluminense (UFF) Rua Passo da Pátria, 156 Niterói RJ Brasil

Soquetes TCP. Jean Ribeiro Damasceno. Escola de Engenharia Universidade Federal Fluminense (UFF) Rua Passo da Pátria, 156 Niterói RJ Brasil Soquetes TCP Jean Ribeiro Damasceno Escola de Engenharia (UFF) Rua Passo da Pátria, 156 Niterói RJ Brasil jeanrdmg@yahoo.com.br Função socket(): Cria um novo ponto final de comunicação int socket ( int

Leia mais

Grupo I [6 v] Considere o processo com a seguinte tabela de páginas: Página Presente Protecção Base 0 0 RW RW R R RW -

Grupo I [6 v] Considere o processo com a seguinte tabela de páginas: Página Presente Protecção Base 0 0 RW RW R R RW - Número: Nome: LEIC/LETI 2014/15-2º Teste de Sistemas Operativos 9/Janeiro/2015 Identifique todas as folhas. Responda no enunciado no espaço fornecido. Justifique todas as respostas. Duração: 1h30m Grupo

Leia mais

Programação de Aplicações em. Rede usando Sockets

Programação de Aplicações em. Rede usando Sockets Programação de Aplicações em Objetivos: Rede usando Sockets Conhecer a API Sockets, que permite a programas de aplicação comunicar-se através da Internet Aplicações e Protocolo de Aplicação Aplicação:

Leia mais

Sockets. André Restivo. April 29, Faculdade de Engenharia da Universidade do Porto. André Restivo (FEUP) Sockets April 29, / 27

Sockets. André Restivo. April 29, Faculdade de Engenharia da Universidade do Porto. André Restivo (FEUP) Sockets April 29, / 27 Sockets André Restivo Faculdade de Engenharia da Universidade do Porto April 29, 2013 André Restivo (FEUP) Sockets April 29, 2013 1 / 27 Sumário 1 Introdução 2 Cliente/Servidor 3 API C++ 4 André Restivo

Leia mais

Redes de Computadores

Redes de Computadores Prof. Universidade Federal de Mato Grosso do Sul brivaldo@facom.ufms.br 24 de abril de 2017 Sumário 1 O núcleo da rede 2 3 Introdução Nesta aula vamos fazer ter uma visão geral de como programas de rede

Leia mais

Programação TCP/IP (sockets)

Programação TCP/IP (sockets) Programação TCP/IP (sockets) Instituto Superior de Engenharia de Lisboa Departamento de Engenharia de Electrónica e Telecomunicações e de Computadores Redes de Computadores Aplicações 17-03-2010 Programação

Leia mais

Cliente/Servidor. Programação com Sockets. Graça Bressan. Graça Bressan/LARC 2000 1

Cliente/Servidor. Programação com Sockets. Graça Bressan. Graça Bressan/LARC 2000 1 Cliente/Servidor Programação com Sockets Graça Bressan Graça Bressan/LARC 2000 1 Interface através de Sockets Socket é uma API ( Aplication Program Interface ) para acesso aos serviços do protocolo de

Leia mais

Modelo Cliente/Servidor e Introdução a Sockets

Modelo Cliente/Servidor e Introdução a Sockets Modelo Cliente/Servidor e Introdução a Sockets MC 833 Programação em s de Computadores Instituto de Computação UNICAMP Juliana Freitag Borin O modelo OSI de 7 camadas Nó origem Nó destino Apresentação

Leia mais

AInterface que um aplicativo utiliza quanto interage com um módulo implementado por outro software

AInterface que um aplicativo utiliza quanto interage com um módulo implementado por outro software Sockets Pedroso 4 de março de 2009 1 Introdução AInterface que um aplicativo utiliza quanto interage com um módulo implementado por outro software é chamado de API (Application Programing Interfaced).

Leia mais

Sockets - Conceitos Básicos. COMUNICAÇÃO ENTRE PROCESSOS Sockets. Conceitos Básicos. Tipos de Sockets

Sockets - Conceitos Básicos. COMUNICAÇÃO ENTRE PROCESSOS Sockets. Conceitos Básicos. Tipos de Sockets Sockets - Conceitos Básicos COMUNICAÇÃO ENTRE PROCESSOS Sockets! Sockets são uma forma de IPC (InterProcess Communication ) fornecida pela 4.3 BSD que fornecem comunicação entre processos residentes em

Leia mais

MC823 Laboratório de Teleprocessamento e Redes

MC823 Laboratório de Teleprocessamento e Redes MC823 Laboratório de Teleprocessamento e Redes Primeiro Semestre 2008 Carlos R. Senna Prof. Edmundo R. M. Madeira Tecnologias de Comunicação 2 MC823 Funções para cliente-servidor UDP 3 well-known port

Leia mais

Sistemas de Operação Sockets

Sistemas de Operação Sockets Sistemas de Operação Sockets O que é um socket? Uma interface de comunicação entre processos que podem ou não residir na mesma máquina, mas que não precisam estar relacionados. É usado normalmente para

Leia mais

Trabalho 02: Cliente e Servidor em C

Trabalho 02: Cliente e Servidor em C Trabalho 02: Cliente e Servidor em C Redes de Computadores 1 Descrição Este trabalho deve ser entregue no Moodle até a data correspondente de entrega. Envie sua resposta somente em texto a não ser que

Leia mais

Programação com Sockets. Redes de Computadores I 2007/2008

Programação com Sockets. Redes de Computadores I 2007/2008 Programação com Sockets Redes de Computadores I 2007/2008 Arquitectura das Aplicações Cliente-Servidor Peer-to-Peer (P2P) Híbrido Peer-to-Peer e Cliente-Servidor 09-11-2007 Universidade do Minho 1 Comunicação

Leia mais

Obter conhecimentos básicos sobre programação socket para desenvolver softwares clientes.

Obter conhecimentos básicos sobre programação socket para desenvolver softwares clientes. Objetivo: Obter conhecimentos básicos sobre programação socket para desenvolver softwares clientes. Atividade 1 Estude, compile, corrija (se necessário) e teste o programa hostbyaddr.c. Modifique o programa

Leia mais

Leandro Soares de Sousa (DSc.) Página: Parte I

Leandro Soares de Sousa (DSc.)   Página:   Parte I Tópicos Especiais em Sistemas Computacionais Leandro Soares de Sousa (DSc.) e-mail: leandro.uff.puro@gmail.com Página: http://www.ic.uff.br/~lsousa Parte I E essa disciplina? 2 Prover algumas das ferramentas

Leia mais

Leandro Soares de Sousa (DSc.) Página: Aula 02 Revisão e Conceitos C

Leandro Soares de Sousa (DSc.)   Página:   Aula 02 Revisão e Conceitos C Tópicos Especiais Leandro Soares de Sousa (DSc.) e-mail: lsousa@id.uff.br Página: http://www.ic.uff.br/~lsousa Aula 02 Revisão e Conceitos C E essa disciplina? 2 Prover algumas das ferramentas necessárias

Leia mais

Sistemas Operacionais - Básico e Avançado - Prof. Celso Maciel da Costa Mestrado em Informática - PUCRS

Sistemas Operacionais - Básico e Avançado - Prof. Celso Maciel da Costa Mestrado em Informática - PUCRS Sistemas Operacionais - Básico e Avançado - Prof. Celso Maciel da Costa Mestrado em Informática - PUCRS Processo Usuário Processo Usuário SO IPC em um mesmo sistema 2 Processo Usuário Processo usuário

Leia mais

Programação paralela em UNIX. Aleardo Manacero Jr.

Programação paralela em UNIX. Aleardo Manacero Jr. Programação paralela em UNIX Aleardo Manacero Jr. Paralelismo em UNIX Pode ser feito tanto para ambientes de memória compartilhada quanto de troca de mensagens Mecanismos de memória compartilhada THREADS

Leia mais

Comunicação entre Processos por Troca de Mensagens. Prof. Celso maciel da Costa

Comunicação entre Processos por Troca de Mensagens. Prof. Celso maciel da Costa Comunicação entre Processos por Troca de Mensagens Prof. Celso maciel da Costa Troca de Mensagens Com memória compartilhada: os processo compartilham variáveis e trocam informações através do uso de variáveis

Leia mais

Sistemas de Operação (2018/2019) Ficha 6

Sistemas de Operação (2018/2019) Ficha 6 Sistemas de Operação (2018/2019) Ficha 6 Q1. Considere o seguinte programa que implementa uma pipe entre processos pai e filho. Compile o exemplo e execute-o. Leia o código com atenção e compreenda-o.

Leia mais

camada de transporte SOCKET TCP UDP

camada de transporte SOCKET TCP UDP Sockets O que são sockets? O acesso aos serviços da camada de transporte pode ser feito por primitivas de transporte, essas primitivas são denominadas SOCKET. Por essas primitivas é possível acessar vários

Leia mais

Comunicação entre Processos

Comunicação entre Processos Comunicação entre Processos Comunicação memória compartilhada troca de mensagens base de comunicação em sistemas distribuídos Mensagens básicas send (destino, msg) receive (origem, mensagem) questões semântica

Leia mais

Leandro Soares de Sousa (DSc.) e-mail: leandro.uff.puro@gmail.com. Página: http://www.ic.uff.br/~lsousa. Parte VI

Leandro Soares de Sousa (DSc.) e-mail: leandro.uff.puro@gmail.com. Página: http://www.ic.uff.br/~lsousa. Parte VI Tópicos Especiais Leandro Soares de Sousa (DSc.) e-mail: leandro.uff.puro@gmail.com Página: http://www.ic.uff.br/~lsousa Parte VI 2 Implementação do chat com o protocolo definido e com o projeto a ser

Leia mais

Sockets: Sumário. Resumo das Propriedades de UDP e de TCP

Sockets: Sumário. Resumo das Propriedades de UDP e de TCP Sockets: Sumário Sockets TCP Modêlo. API de Java. API da biblioteca C. Avaliação Crítica de Sockets. 1 Resumo das Propriedades de UDP e de TCP Propriedade UDP TCP Abstracção Mens. Stream Baseado em Conexão

Leia mais

Programação paralela em UNIX. Aleardo Manacero Jr.

Programação paralela em UNIX. Aleardo Manacero Jr. Programação paralela em UNIX Aleardo Manacero Jr. Paralelismo em UNIX Pode ser feito tanto para ambientes de memória compartilhada quanto de troca de mensagens Mecanismos de memória compartilhada THREADS

Leia mais

Comunicação entre pai e filho

Comunicação entre pai e filho Comunicação entre pai e filho Ao chamar um fork(), processos pai e filho deixam de compartilhar memória Como fazer então para que o resultado de um processo possa ser recebido pelo outro? Exemplos: Processo

Leia mais

Comunicação entre processos. Sistema centralizado

Comunicação entre processos. Sistema centralizado Sistemas Distribuídos Comunicação entre processos Sistema centralizado Comunicação entre processos Arquivo Memória compartilhada Sinal Fila de mensagem SO gerencia comunicação 2 Sistema distribuído Idéia

Leia mais

Desenvolvimento de Produtos Mecatrônicos

Desenvolvimento de Produtos Mecatrônicos SEM 0544 Desenvolvimento de Produtos Mecatrônicos Glauco Caurin José Martins Jr Roteiro da aula Conceitos básicos Histórico das redes Redes locais Modelo de referência OSI Arquitetura TCP/IP Camada de

Leia mais

Um Tutorial sobre Sockets Parte I

Um Tutorial sobre Sockets Parte I Um Tutorial sobre Sockets Parte I Por Antonio Marcelo Iniciando As grandes ferramentas utilizadas por especialistas de segurança, hackers e crakers tem como base a linguagem C ANSI ou C ++. Muitos dos

Leia mais

Relatório do Laboratório 3

Relatório do Laboratório 3 Relatório do Laboratório 3 Diogo Costa e Lucas Magrini Rigo 180188 e 161064 23 de setembro de 2011 Universidade Federal do Rio Grande do Sul INF01154 Redes de Computadores N For: Valter Roesler 1 Introdução

Leia mais

Camada de Aplicação da Arquitetura TCP/IP

Camada de Aplicação da Arquitetura TCP/IP Arquitetura de Redes de Computadores e Tecnologia de Implementação de Redes 2016.1 Camada de Aplicação da Arquitetura TCP/IP Curso Técnico Integrado em Informática Turma: INT.INF.3M Arquitetura de Redes

Leia mais

Computação 2. Aula Profª. Fabiany Listas Duplamente Encadeadas

Computação 2. Aula Profª. Fabiany Listas Duplamente Encadeadas Computação 2 Aula 10.1 Listas Duplamente Encadeadas Profª. Fabiany fabianyl@utfpr.edu.br ListaEncadeada.h #ifndef _LISTAENCADEADA_H_ #define _LISTAENCADEADA_H_ #include #include #include

Leia mais

INF01018 Aula Prática 1 Cliente-Servidor e Multicast

INF01018 Aula Prática 1 Cliente-Servidor e Multicast 1 / 30 INF01018 Aula Prática 1 Cliente-Servidor e Multicast Lucas Mello Schnorr, Alexandre Silva Caríssimi {lmschnorr,asc}@inf.ufrgs.br http://www.inf.ufrgs.br/ lmschnorr/ad/ INF01018 Sistemas Operacionais

Leia mais

SEM 544 Desenvolvimento de Produtos Mecatrônicos

SEM 544 Desenvolvimento de Produtos Mecatrônicos SEM 544 Desenvolvimento de Produtos Mecatrônicos >>>> Sistemas de Tempo Real

Leia mais

Sistemas Distribuídos (Parte 4 - Aplicação Distribuída)

Sistemas Distribuídos (Parte 4 - Aplicação Distribuída) Unidade de Gestão da Educação Presencial - GEDUP Pós-graduação em Redes de Computadores Sistemas Distribuídos (Parte 4 - Aplicação Distribuída) Prof. Ms. Tomás Dias Sant Ana Varginha, 2006 Sumário 1. INTRODUÇÃO...1

Leia mais

Bibliotecas. Apoio à Programação Distribuída. Socket. Socket. bibliotecas bibliotecas+ferramentas linguagens de programação distribuídas

Bibliotecas. Apoio à Programação Distribuída. Socket. Socket. bibliotecas bibliotecas+ferramentas linguagens de programação distribuídas Apoio à Programação Distribuída bibliotecas bibliotecas+ferramentas linguagens de programação distribuídas flexibilidade de programação disponibilidade da ferramenta facilidade de desenvolvimento e reuso

Leia mais

Sistemas Distribuídos

Sistemas Distribuídos Sistemas Distribuídos Universidade Federal do ABC Turma: Ciência da Computação Prof. Dr. Francisco Isidro Massetto Introdução: Sockets Para estabelecer a Comunicação Interprocesso nos Sistemas Distribuídos,

Leia mais

Volnys Bernal 1. Trabalho Chat UDP. PSI 2653 Meios Eletrônicos Interativos I

Volnys Bernal 1. Trabalho Chat UDP. PSI 2653 Meios Eletrônicos Interativos I 2007-2017 Volnys Bernal 1 Trabalho PSI 2653 Meios Eletrônicos Interativos I 2007-2017 Volnys Bernal 2 Objetivo: Desenvolvimento de um programa chat UDP (cliente e servidor) Grupo Cada grupo deve escolher

Leia mais

sockets interprocess communication Taisy Weber

sockets interprocess communication Taisy Weber sockets interprocess communication Taisy Weber Comunicação entre processos Mecanismos Pipes, FIFO (named pipes), semáforos, message queues. Memória compartilhada. Sockets Definição, chamadas de sistemas,

Leia mais

Sistemas Embebidos II Semestre de Verão de 2011/2012 Terceira atividade prática

Sistemas Embebidos II Semestre de Verão de 2011/2012 Terceira atividade prática Sistemas Embebidos II Semestre de Verão de 2011/2012 Terceira atividade prática 1ª Parte ecos - instalação do uip Seguindo os diapositivos sobre uip, criar a aplicação servidora de eco aí exemplificada.

Leia mais

Leandro Soares de Sousa (DSc.) Página:

Leandro Soares de Sousa (DSc.)   Página: Leandro Soares de Sousa (DSc.) e-mail: lsousa@id.uff.br Página: http://www.ic.uff.br/~lsousa Sobre o curso Índice Ementa Bibliografia Aulas Avaliações Plano de aula Trabalhos Fontes dos programas (onde

Leia mais

Comunicação entre Processos

Comunicação entre Processos Comunicação entre Processos Pipes Redirecionamento de entrada e saída 4/19/18 1 O Pipe: Características (1) Canal de comunicação entre processos parentes, usando a politica First-In-First-Out (FIFO) Tipicamente,

Leia mais

Básico: estrutura de programa, sintaxe Interface com linha de comando

Básico: estrutura de programa, sintaxe Interface com linha de comando Programação em C Sintaxe Básico: estrutura de programa, sintaxe Interface com linha de comando Preprocessamento e compilação Makefiles Ponteiros e estruturas Bibliotecas, ficheiros include e funções Referências

Leia mais

Problemas relacionados a exclusão mútua

Problemas relacionados a exclusão mútua Problemas relacionados a exclusão mútua Deadlock: um conjunto de processos fica bloqueado, cada um a espera de um recurso que o outro detém. Starvation: alguns processos são repetidamente preteridos, enquanto

Leia mais

Leandro Soares de Sousa (DSc.) Página: Aula 03 Revisão e Conceitos C e Unix

Leandro Soares de Sousa (DSc.)   Página:   Aula 03 Revisão e Conceitos C e Unix Tópicos Especiais Leandro Soares de Sousa (DSc.) e-mail: lsousa@id.uff.br Página: http://www.ic.uff.br/~lsousa Aula 03 Revisão e Conceitos C e Unix Ferramentas para ajudá-los! 2 Programas com vários fontes

Leia mais

Curso de Programação C em Ambientes Linux Aula 05

Curso de Programação C em Ambientes Linux Aula 05 Curso de Programação C em Ambientes Linux Aula 05 Centro de Engenharias da Mobilidade - UFSC Professores Gian Berkenbrock e Giovani Gracioli http://www.lisha.ufsc.br/c+language+course+resources Conteúdo

Leia mais

Redes de Computadores I

Redes de Computadores I Departamento de Engenharia Electrotécnica e de Computadores Secção de Telecomunicações Redes de Computadores I Introdução à Interface "Socket" do UNIX Licenciatura de Engenharia Informática e de Computadores

Leia mais

API de Sockets. Modelo Cliente/Servidor (2/2) Modelo Cliente/Servidor (1/2) José Pedro Oliveira Sistemas Operativos I

API de Sockets. Modelo Cliente/Servidor (2/2) Modelo Cliente/Servidor (1/2) José Pedro Oliveira Sistemas Operativos I Conteúdo (jpo@di.uminho.pt) Grupo de Sistemas Distribuídos Departamento de Informática Escola de Engenharia Universidade do Minho 1 Sistemas Operativos I 2006-2007 Modelo Cliente/Servidor (1/2) Modelo

Leia mais

Camada de Transporte Protocolos TCP e UDP

Camada de Transporte Protocolos TCP e UDP Arquitetura de Redes de Computadores e Tecnologia de Implementação de Redes 2016.1 Camada de Transporte Protocolos TCP e UDP Curso Técnico Integrado em Informática Turma: INT.INF.3M Arquitetura de Redes

Leia mais

06/10/2015. Modelo TCP/IP Camada de Transporte DISCIPLINA: TECNOLOGIA DE REDES DE COMPUTADORES. UDP User Datagram Protocol. UDP User Datagram Protocol

06/10/2015. Modelo TCP/IP Camada de Transporte DISCIPLINA: TECNOLOGIA DE REDES DE COMPUTADORES. UDP User Datagram Protocol. UDP User Datagram Protocol Tecnologia em Jogos Digitais Modelo TCP/IP Camada de Transporte DISCIPLINA: TECNOLOGIA DE REDES DE COMPUTADORES O transporte dos dados na INTERNET é realizado por dois protocolos. PROTOCOLOS TCP E UDP

Leia mais

Engenharia Elétrica Eletrônica Slides 20: TCP/IP em Winsocks 2. API do Windows para programar utilizando o protocolo TCP/IP Prof. Jean Marcelo SIMÃO

Engenharia Elétrica Eletrônica Slides 20: TCP/IP em Winsocks 2. API do Windows para programar utilizando o protocolo TCP/IP Prof. Jean Marcelo SIMÃO Engenharia Elétrica Eletrônica Slides 20: TCP/IP em Winsocks 2. API do Windows para programar utilizando o protocolo TCP/IP Prof. Jean Marcelo SIMÃO Engenharia Elétrica Eletrônica Tutorial: Programação

Leia mais

AED 2002/2003 p.1/19. Tipos Abstractos. Necessidade de tipos de dados abstractos Objectos Pilhas FIFOs e filas

AED 2002/2003 p.1/19. Tipos Abstractos. Necessidade de tipos de dados abstractos Objectos Pilhas FIFOs e filas AED 2002/2003 p.1/19 Tipos Abstractos Necessidade de tipos de dados abstractos Objectos Pilhas FIFOs e filas AED 2002/2003 p.2/19 Tipos Abstractos de Dados (ADT) Mesmas estruturas (Pilhas, FIFOs, Listas)

Leia mais

1 Projeto de software de clientes. 1

1 Projeto de software de clientes. 1 1 Projeto de software de clientes. 1 1.1 Introdução Aplicações clientes são conceitualmente mais simples que aplicações servidoras pois, normalmente, não manipulam concorrência explicita com múltiplos

Leia mais

Introdução à Programação Sockets

Introdução à Programação Sockets 2002-2015 Volnys Bernal 1 Introdução à Programação Sockets Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos Escola Politécnica da USP 2002-2015 Volnys Bernal 2 Agenda Interface

Leia mais

Programação em C/C++

Programação em C/C++ OO Engenharia Eletrônica - Programação em C/C++ Slides 20: TCP/IP em Winsocks 2. API do Windows para programar aplicativos que utilizam o protocolo TCP/IP. Prof. Jean Marcelo SIMÃO TCP/IP em Winsocks 2

Leia mais

Leandro Soares de Sousa (D.Sc.) Página:

Leandro Soares de Sousa (D.Sc.)   Página: Leandro Soares de Sousa (D.Sc.) e-mail: lsousa@id.uff.br Página: http://www.ic.uff.br/~lsousa Sobre o curso Sumário Ementa Bibliografia Aulas Avaliações Plano de aula Trabalhos Fontes dos programas (onde

Leia mais

Redes de Computadores II. Programação com Sockets em Python

Redes de Computadores II. Programação com Sockets em Python v.2016 Redes de Computadores II Programação com Sockets em Python Prof. Ricardo Couto A. da Rocha rcarocha@ufg.br UFG Regional de Catalão Camada de Transporte Arquitetura TCP/IP APLICAÇÃO TRANSPORTE REDE

Leia mais

Redes de Computadores

Redes de Computadores Redes de Computadores Camada de Aplicação Slide 1 Aplicação e Protocolo de Aplicação Aplicação: processos distribuídos em comunicação rodam nos computadores usuários da rede como programas de usuário trocam

Leia mais

Camada de Transporte. Redes Industriais Rone Ilídio UFSJ CAP

Camada de Transporte. Redes Industriais Rone Ilídio UFSJ CAP Camada de Transporte Redes Industriais Rone Ilídio UFSJ CAP Itens do Livro Livro Rede de Computadores e a Internet Kurose 5ª edição 3 Camada de Transporte 3.1 Introdução 3.3 Transporte não orientado a

Leia mais

Arquitetura de Redes de Computadores

Arquitetura de Redes de Computadores Arquitetura de Redes de Computadores Unidade III Camada de Transporte Apresentado por Prof. Fred Sauer Baseado em Material didático de Prof Sergio Cardoso Objetivos do Capítulo Entender os princípios dos

Leia mais

Sistemas Operacionais II

Sistemas Operacionais II Introdução Instituto de Informátic ca - UFRGS Sistemas Operacionais II Estudo de caso: sockets API Aula 11 Aplicações em ambientes de rede seguem dois modelos: Cliente-servidor Peer-to-peer Interface de

Leia mais

Message Passing Interface - MPI

Message Passing Interface - MPI Message Passing Interface - Pedro de Botelho Marcos Maio/2008 1 Sumário Introdução; Conceitos básicos; Comunicação; Principais rotinas; Compilando e executando códigos ; Exemplos; Referências; 2 Introdução

Leia mais

Comunicação entre Processos. 1. Pipes 2. Fifos 3. Sockets

Comunicação entre Processos. 1. Pipes 2. Fifos 3. Sockets Comunicação entre Processos 1. Pipes 2. Fifos 3. Sockets Pipes Implementa um canal de comunicação associado a um processo Limitações: Os dados apenas fluem num sentido Só podem ser usados entre processos

Leia mais

Sistemas Operacionais:

Sistemas Operacionais: Sistemas Operacionais: Sistemas Distribuídos e Programação em Redes de Computadores Dierone Cesar Foltran Junior dcfoltran at yahoo.com Sistemas Distribuídos Sistemas Computacionais Distribuídos Lamport:

Leia mais

User Datagram Protocol

User Datagram Protocol User Datagram Protocol UDP: Protocolo utiliza para distinguir para qual usuário ou aplicativo deve ser encaminhado um datagrama destinado a uma máquina que esteja executando mais de um processo. Problemas:

Leia mais

Algoritmos e Estruturas de Dados I (DCC/003) Funções

Algoritmos e Estruturas de Dados I (DCC/003) Funções Algoritmos e Estruturas de Dados I (DCC/003) Funções Funções Funções definem operações que são usadas frequentemente Funções, na matemática, requerem parâmetros de entrada, e definem um valor de saída

Leia mais

Protocolo de resolução de endereços: ARP

Protocolo de resolução de endereços: ARP Protocolo de resolução de endereços: ARP Introdução, cache ARP, formato do pacote ARP, exemplos de ARP em acção, proxy ARP, ARP "Gratuito, comando arp. Endereço físico Os endereços IP fazem apenas sentido

Leia mais

Trabalho 09: Geração de Pacotes e Tabela de Roteamento IPv6

Trabalho 09: Geração de Pacotes e Tabela de Roteamento IPv6 Trabalho 09: Geração de Pacotes e Tabela de Roteamento IPv6 Redes de Computadores 1 Descrição Você pode fazer este trabalho em dupla, desde que o seu parceiro não seja o mesmo do trabalho 08. Neste trabalho

Leia mais

Material sobre Funções AEDS 1

Material sobre Funções AEDS 1 Material sobre Funções AEDS 1 1 Funções - revisão Funções definem operações que são usadas frequentemente Funções, na matemática, requerem parâmetros de entrada e definem um valor de saída 2 Funções -

Leia mais

Redes de Computadores

Redes de Computadores Introdução Inst tituto de Info ormátic ca - UF FRGS s de Computadores User Datagram Protocol - UDP NAT/NAPT Introdução a protocolos de aplicação (sockets) Aula 24 Entidades da camada de transporte oferecem

Leia mais

Comunicação Inter-Processo em Unix. Pipes FIFO (Named Pipes) Pipes

Comunicação Inter-Processo em Unix. Pipes FIFO (Named Pipes) Pipes Comunicação Inter-Processo em Unix Pipes FIFO (Named Pipes) 1 Pipes 2 1! Comunicação entre pai e filho Ao chamar um fork(), processos pai e filho deixam de compartilhar memória Como fazer então para que

Leia mais

Tipos abstratos de dados; pilhas e filas

Tipos abstratos de dados; pilhas e filas 1 Tipos abstratos de dados; pilhas e filas Além do Sedgewick (sempre leiam o Sedgewick), veja http://www.ime.usp.br/~pf/algoritmos/aulas/pilha.html http://www.ime.usp.br/~pf/algoritmos/aulas/fila.html

Leia mais

Listas (cont.) K&R: Capitulo 6. Lista Simplesmente Ligada IAED, 2012/2013. Conjunto de nós. Cada nó contém. head NULL. typedef struct node {

Listas (cont.) K&R: Capitulo 6. Lista Simplesmente Ligada IAED, 2012/2013. Conjunto de nós. Cada nó contém. head NULL. typedef struct node { Listas (cont.) K&R: Capitulo 6 Lista Simplesmente Ligada Conjunto de nós head NULL Cada nó contém Informação útil Ponteiro para o próimo nó typedef struct node Item item; struct node *net; *link; Item

Leia mais