Unix SocketsTutorial
1
Curso Profissional de Gestão e Programação de Sistemas Informáticos
Redes de Comunicação
Índice
• Unix Sockets
• O que é?..............................................................................................................................3
• Onde é que o socket é usado?................................................................................................4
• Tipos de socket.....................................................................................................................5
• Tipos de Servidores…………………………………………………………………………………………………7
• Como criar um cliente e um servidor…………………………………………………………………………..8
• Funções de Núcleo ………………………………………………………………………………………………..16
• Funções de Ajuda …………………………………………………………………………………………………15
• Conclusão …………………………………………………………………………………………………………..17
• Figuras eTabelas
• Tabela 1-Tipos de Sockets……..…………………………………………………………………………5
• Fig.1- DNS……….......................…………………………………………………………………………6
• Fig.2- Modelo Cliente -Servidor....................................................................................7
• Fig.3- Arquitetura cliente-servidor...............................................................................8
• Fig.4- Arquitetura cliente-servidor……..………………………………………………………………8
• Fig.5 –Tipos de Servidores…………………………………………………………………………………9
• Fig.6 –Tipos de Servidores………………………………………………………………………………...9
Índice ( cont.)
3
• Figuras eTabelas.
• Fig.7- Como criar / instalar um cliente e um servidor……………………………………………...10
• Tabela 2- Portas e serviços………………………………………………………………………………...11
• Tabela 3- Funções de Núcleo..........................................................................................13
• Tabela 4- Funções de Núcleo..........................................................................................14
• Tabela 5- Funções de Ajuda..........................................................................................15
• Tabela 6- Funções de Ajuda..........................................................................................16
Unix Socket- O que é o Socket?
 Sockets permitem comunicar entre dois processos diferentes na mesma ou outra maquina.
Quando quiser comunicar com outro programa na internet vai usar um descritor de arquivo.
A partir dai, realiza chamadas de socket send() e recv().
 O socket Unix é usado numa aplicação framework cliente-servidor, o servidor é um processo que desempenha algumas
funções pedidas pelo cliente
A maioria de protocolos ao nível de aplicação é:
 FTP (FileTransfer Protocol);
 SMTP (Simple MailTransfer Protocol);
 POP3 (Post Office Protocol);
4
Unix Socket-Tipos de socket
5
Stream Socket Utiliza o protocoloTCP para comunicar
através de stream de dados (um fluxo
contínuo de dados).
Datagram Socket
Socket Utiliza o protocolo UDP para
comunicar através de pacotes de
dados(os pacotes são independentes
entre si).
Raw Socket É utilizado para o desenvolvimento de
novos protocolos de comunicação ou
acesso a protocolos encriptados.
Sequenced Packets Socket Este assemelha-se ao Stream Socket,
tendo como diferença o facto de
preservar os registos de limite.
Tabela 1 –Tipos de Sockets
Unix Socket- Network Hostname e DNS
6
O HostName é um nome de um servidor
específico de determinada rede da
Internet.
O hostname é o primeiro nome da
especificação completa do host. Por
exemplo, www.microsoft.com indica o
servidor denominado "www" da rede da
Microsoft Corporation.
DNS ( Domain Name System) traduzem
nomes para os para os endereços IP e vice-
versa.
Fig.1- DNS
Unix Socket- Modelo Cliente-Servidor
7
Fig.2- Modelo Cliente-Servidor
Unix Socket- Arquitetura cliente-servidor
8
Nível 3
Nível 2 Fig.4-Arquitetura cliente-servidor
Fig.3-Arquitetura cliente-servidor
Unix Socket-Tipos de Servidores
9
Fig.6-Tipos de Servidores
Fig.5-Tipos de Servidores
Unix Socket – Como criar/ instalar um cliente e um servidor
10Fig.7-Como criar / instalar um cliente e um servidor
Unix Socket - Portas e Serviços
11
Serviço Número da Portas Descrição do serviço
Echo 7 UDP/TCP envia de volta e recebe
Discard 9 UDP/TCP manda para fora o input,
Daytime 13 UDP/TCP retorna o tempo ASCII
Chargen 19 TCP retornar os carateres.
ftp 21 TCP transferência de ficheiros.
telnet 23 TCP controla o login.
Smtp 25 TCP email.
Tfto 37 UDP transferência trivial dos ficheiros.
finger 69 TCP informação sobre os utilizadores
http 80 TCP World WideWeb
login 513 TCP controla o login
Tabela 2-Portas e serviços
Unix Socket -Funções de Núcleo
12
Função - Socket
#include <sys/types.h>
#include <sys/socket.h>
int socket (int family, int type, int protocol);
⋮
Esta chamada retorna um descritor de socket que
pode usar em chamadas de sistema posteriores ou -1
em caso erro.
Função - Bind
#include <sys/types.h>
#include <sys/socket.h>
int bind(int sockfd, struct sockaddr *my_addr,int addrlen);
⋮
Esta chamada retorna 0 se ela for vinculada com
sucesso ao endereço, caso contrário, ela retornará -1
em caso de erro.
Função - Listen
#include <sys/types.h>
#include <sys/socket.h>
int listen(int sockfd,int backlog);
⋮
Esta chamada retorna 0 em caso de sucesso, caso
contrário, ela retorna -1 em caso de erro.
Função - Accept
#include <sys/types.h>
#include <sys/socket.h>
int accept (int sockfd, struct sockaddr *cliaddr, socklen_t
*addrlen);
⋮
Esta chamada retorna um descritor não-negativo no
sucesso, caso contrário ele retorna -1 em caso de
erro.
Tabela 3-Funções de Núcleo
Unix Socket - Funções de Núcleo
13
Função – Send/SendTo
// Função Send
int send(int sockfd, const void *msg, int len, int flags);
⋮
//Função SendTo
int sendto(int sockfd, const void *msg, int len, unsigned int
flags, const struct sockaddr *to, int tolen);
⋮
Estas chamadas retornam o número de bytes
enviados, caso contrário retornam -1 em caso de
erro.
Função – Recv/RecvFrom
//Função Recv
int recv(int sockfd, void *buf, int len, unsigned int flags);
⋮
//Função RecvFrom
int recvfrom(int sockfd, void *buf, int len, unsigned int
flags struct sockaddr *from, int *fromlen);
⋮
Esta chamada retorna o número de bytes lidos no
buffer, caso contrário ele retornará -1 em caso de
erro.
Função - Close
int close( int sockfd );
⋮
Esta chamada retorna 0 em caso de sucesso, caso
contrário, retorna -1 em caso de erro.
Função - Shutdown
int shutdown(int sockfd, int how);
⋮
Esta chamada retorna 0 em caso de sucesso, caso
contrário, ela retorna -1 em caso de erro.
Tabela 4-Funções de Núcleo
Unix Socket - Funções de Ajuda
14
Função – Write
#include <unistd.h>
int write(int fildes, const void *buf, int
nbyte);
⋮
Após a conclusão bem-sucedida 0 write () retorna o
número de bytes realmente gravados no ficheiro
associado, fildes. Este número nunca é maior do que
nbyte. Caso contrário, é retornado -1.
Função – Read
#include <sys/types.h>
#include <unistd.h>
int fork(void);
⋮
Após a conclusão bem-sucedida, write () retorna 0
número de bytes realmente gravados no ficheiro
associado a fildes. Este número nunca é maior do
que nbyte. Caso contrário, é retornado -1.
Função - Fork
int close( int sockfd );
⋮
Após a conclusão bem-sucedida, fork () retorna 0
para o processo filho e o ID do processo do processo
filho para o processo pai. Caso contrário, -1 é
retornado para o processo pai, nenhum processo
filho é criado e errno está configurado para indicar o
erro.
Função - bzero
void bzero(void *s, int nbyte);
⋮
Esta função não retorna valores.
Tabela 5-Funções de Ajuda
Unix Socket - Funções de Ajuda
15
Função – bcmp
int bcmp(const void *s1, const void *s2, int
nbyte);
⋮
Esta função retorna 0 se ambas as strings forem
idênticas, 1 caso contrário. A função bcmp () retorna
sempre 0 quando nbyte é 0.
Função – bcopy
void bcopy(const void *s1, void *s2, int
nbyte);
⋮
Esta função não retorna nada.
Função - memset
void *memset(void *s, int c, int nbyte);
⋮
Esta função retorna um apontador para vazio, mais
concretamente, um apontador para a memória
definida.
Tabela 6-Funções de Ajuda

Unix Sockets

  • 1.
    Unix SocketsTutorial 1 Curso Profissionalde Gestão e Programação de Sistemas Informáticos Redes de Comunicação
  • 2.
    Índice • Unix Sockets •O que é?..............................................................................................................................3 • Onde é que o socket é usado?................................................................................................4 • Tipos de socket.....................................................................................................................5 • Tipos de Servidores…………………………………………………………………………………………………7 • Como criar um cliente e um servidor…………………………………………………………………………..8 • Funções de Núcleo ………………………………………………………………………………………………..16 • Funções de Ajuda …………………………………………………………………………………………………15 • Conclusão …………………………………………………………………………………………………………..17 • Figuras eTabelas • Tabela 1-Tipos de Sockets……..…………………………………………………………………………5 • Fig.1- DNS……….......................…………………………………………………………………………6 • Fig.2- Modelo Cliente -Servidor....................................................................................7 • Fig.3- Arquitetura cliente-servidor...............................................................................8 • Fig.4- Arquitetura cliente-servidor……..………………………………………………………………8 • Fig.5 –Tipos de Servidores…………………………………………………………………………………9 • Fig.6 –Tipos de Servidores………………………………………………………………………………...9
  • 3.
    Índice ( cont.) 3 •Figuras eTabelas. • Fig.7- Como criar / instalar um cliente e um servidor……………………………………………...10 • Tabela 2- Portas e serviços………………………………………………………………………………...11 • Tabela 3- Funções de Núcleo..........................................................................................13 • Tabela 4- Funções de Núcleo..........................................................................................14 • Tabela 5- Funções de Ajuda..........................................................................................15 • Tabela 6- Funções de Ajuda..........................................................................................16
  • 4.
    Unix Socket- Oque é o Socket?  Sockets permitem comunicar entre dois processos diferentes na mesma ou outra maquina. Quando quiser comunicar com outro programa na internet vai usar um descritor de arquivo. A partir dai, realiza chamadas de socket send() e recv().  O socket Unix é usado numa aplicação framework cliente-servidor, o servidor é um processo que desempenha algumas funções pedidas pelo cliente A maioria de protocolos ao nível de aplicação é:  FTP (FileTransfer Protocol);  SMTP (Simple MailTransfer Protocol);  POP3 (Post Office Protocol); 4
  • 5.
    Unix Socket-Tipos desocket 5 Stream Socket Utiliza o protocoloTCP para comunicar através de stream de dados (um fluxo contínuo de dados). Datagram Socket Socket Utiliza o protocolo UDP para comunicar através de pacotes de dados(os pacotes são independentes entre si). Raw Socket É utilizado para o desenvolvimento de novos protocolos de comunicação ou acesso a protocolos encriptados. Sequenced Packets Socket Este assemelha-se ao Stream Socket, tendo como diferença o facto de preservar os registos de limite. Tabela 1 –Tipos de Sockets
  • 6.
    Unix Socket- NetworkHostname e DNS 6 O HostName é um nome de um servidor específico de determinada rede da Internet. O hostname é o primeiro nome da especificação completa do host. Por exemplo, www.microsoft.com indica o servidor denominado "www" da rede da Microsoft Corporation. DNS ( Domain Name System) traduzem nomes para os para os endereços IP e vice- versa. Fig.1- DNS
  • 7.
    Unix Socket- ModeloCliente-Servidor 7 Fig.2- Modelo Cliente-Servidor
  • 8.
    Unix Socket- Arquiteturacliente-servidor 8 Nível 3 Nível 2 Fig.4-Arquitetura cliente-servidor Fig.3-Arquitetura cliente-servidor
  • 9.
    Unix Socket-Tipos deServidores 9 Fig.6-Tipos de Servidores Fig.5-Tipos de Servidores
  • 10.
    Unix Socket –Como criar/ instalar um cliente e um servidor 10Fig.7-Como criar / instalar um cliente e um servidor
  • 11.
    Unix Socket -Portas e Serviços 11 Serviço Número da Portas Descrição do serviço Echo 7 UDP/TCP envia de volta e recebe Discard 9 UDP/TCP manda para fora o input, Daytime 13 UDP/TCP retorna o tempo ASCII Chargen 19 TCP retornar os carateres. ftp 21 TCP transferência de ficheiros. telnet 23 TCP controla o login. Smtp 25 TCP email. Tfto 37 UDP transferência trivial dos ficheiros. finger 69 TCP informação sobre os utilizadores http 80 TCP World WideWeb login 513 TCP controla o login Tabela 2-Portas e serviços
  • 12.
    Unix Socket -Funçõesde Núcleo 12 Função - Socket #include <sys/types.h> #include <sys/socket.h> int socket (int family, int type, int protocol); ⋮ Esta chamada retorna um descritor de socket que pode usar em chamadas de sistema posteriores ou -1 em caso erro. Função - Bind #include <sys/types.h> #include <sys/socket.h> int bind(int sockfd, struct sockaddr *my_addr,int addrlen); ⋮ Esta chamada retorna 0 se ela for vinculada com sucesso ao endereço, caso contrário, ela retornará -1 em caso de erro. Função - Listen #include <sys/types.h> #include <sys/socket.h> int listen(int sockfd,int backlog); ⋮ Esta chamada retorna 0 em caso de sucesso, caso contrário, ela retorna -1 em caso de erro. Função - Accept #include <sys/types.h> #include <sys/socket.h> int accept (int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen); ⋮ Esta chamada retorna um descritor não-negativo no sucesso, caso contrário ele retorna -1 em caso de erro. Tabela 3-Funções de Núcleo
  • 13.
    Unix Socket -Funções de Núcleo 13 Função – Send/SendTo // Função Send int send(int sockfd, const void *msg, int len, int flags); ⋮ //Função SendTo int sendto(int sockfd, const void *msg, int len, unsigned int flags, const struct sockaddr *to, int tolen); ⋮ Estas chamadas retornam o número de bytes enviados, caso contrário retornam -1 em caso de erro. Função – Recv/RecvFrom //Função Recv int recv(int sockfd, void *buf, int len, unsigned int flags); ⋮ //Função RecvFrom int recvfrom(int sockfd, void *buf, int len, unsigned int flags struct sockaddr *from, int *fromlen); ⋮ Esta chamada retorna o número de bytes lidos no buffer, caso contrário ele retornará -1 em caso de erro. Função - Close int close( int sockfd ); ⋮ Esta chamada retorna 0 em caso de sucesso, caso contrário, retorna -1 em caso de erro. Função - Shutdown int shutdown(int sockfd, int how); ⋮ Esta chamada retorna 0 em caso de sucesso, caso contrário, ela retorna -1 em caso de erro. Tabela 4-Funções de Núcleo
  • 14.
    Unix Socket -Funções de Ajuda 14 Função – Write #include <unistd.h> int write(int fildes, const void *buf, int nbyte); ⋮ Após a conclusão bem-sucedida 0 write () retorna o número de bytes realmente gravados no ficheiro associado, fildes. Este número nunca é maior do que nbyte. Caso contrário, é retornado -1. Função – Read #include <sys/types.h> #include <unistd.h> int fork(void); ⋮ Após a conclusão bem-sucedida, write () retorna 0 número de bytes realmente gravados no ficheiro associado a fildes. Este número nunca é maior do que nbyte. Caso contrário, é retornado -1. Função - Fork int close( int sockfd ); ⋮ Após a conclusão bem-sucedida, fork () retorna 0 para o processo filho e o ID do processo do processo filho para o processo pai. Caso contrário, -1 é retornado para o processo pai, nenhum processo filho é criado e errno está configurado para indicar o erro. Função - bzero void bzero(void *s, int nbyte); ⋮ Esta função não retorna valores. Tabela 5-Funções de Ajuda
  • 15.
    Unix Socket -Funções de Ajuda 15 Função – bcmp int bcmp(const void *s1, const void *s2, int nbyte); ⋮ Esta função retorna 0 se ambas as strings forem idênticas, 1 caso contrário. A função bcmp () retorna sempre 0 quando nbyte é 0. Função – bcopy void bcopy(const void *s1, void *s2, int nbyte); ⋮ Esta função não retorna nada. Função - memset void *memset(void *s, int c, int nbyte); ⋮ Esta função retorna um apontador para vazio, mais concretamente, um apontador para a memória definida. Tabela 6-Funções de Ajuda

Notas do Editor

  • #9 Nível 2- O cliente interage diretamente com o servidor, esta arquitetura costuma ter problemas de segurança e velocidade. Nível 3- Existe um tipo de software entre o cliente e o servidor chamado “middleware” é utilizado para verificar o estado da segurança da ligação e faz um balanço no caso de excesso de informação.
  • #11 Cliente. Criar um socket com a chamada ao sistema socket(). Conectar o socket ao endereço do servidor com a chamada ao sistema connect() Para receber e enviar dados existem varias formas, a mais simples é usar o read() e write(). Servidor. Criar um socket com a chamada ao sistema socket(). Para unir o socket com um endereço usa-se a chamada ao sistema bind(). Descobrir conexões com a chamada ao sistema listen(). Para aceitar uma conexão usa-se a chamada ao sistema accept(), esta chamada ao sistema geralmente bloqueia a conexão. Para receber e enviar dados usa-se as chamadas ao sistema read() e write().