#01 - Introdução à comunicação orientada à conexão utilizando a API de Sockets
Resumo
Introdução à comunicação TCP/IP recorrendo à API de Sockets.
Apresentação das principais estruturas de dados, chamadas ao
sistemas e funções auxiliares. Implementação de um cliente e servidor
rudimentares de echo
.
Principais chamadas ao sistema
#include <sys/types.h> #include <sys/socket.h> int socket(int domain, int type, int protocol); int listen(int sockfd, int backlog); int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen); int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen); #include <unistd.h> ssize_t read(int fd, void *buf, size_t count); ssize_t write(int fd, const void *buf, size_t count); int close(int fd);
Estrutura de endereço de sockets IP
#include <netinet/in.h> struct in_addr { in_addr_t s_addr; /* endereço IPV4 (32 bits, ord. rede) */ } struct sockaddr_in { sa_family_t sin_family; /* AF_INET */ in_port_t sin_port; /* porto (16 bits, ord. rede) */ struct in_addr sin_addr; /* endereço IPv4 (32 bits, ord. rede) */ char sin_zero[8]; /* não usado */ }
Manipulação de representações de endereços IP
#include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> int inet_pton(int af, const char *src, void *dst); const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt);
#include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> int inet_aton(const char *cp, struct in_addr *inp); char *inet_ntoa(struct in_addr in);
Ordenação de dados
#include <arpa/inet.h> uint32_t htonl(uint32_t hostlong); uint16_t htons(uint16_t hostshort); uint32_t ntohl(uint32_t netlong); uint16_t ntohs(uint16_t netshort);
Exercícios propostos
- Implemente um programa cliente do serviço de
echo
que executa no porto 7 de cada uma das máquinas. O programa deverá enviar uma linha de texto para o servidor e escrever a resposta recebida. - Implemente um programa servidor de
echo
apropriado ao cliente implementado no exercício anterior.