#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
echoque 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
echoapropriado ao cliente implementado no exercício anterior.