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- 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
5. 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
6. 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
8. Unix Socket- Arquitetura cliente-servidor
8
Nível 3
Nível 2 Fig.4-Arquitetura cliente-servidor
Fig.3-Arquitetura cliente-servidor
9. Unix Socket-Tipos de Servidores
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çõ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
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
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.
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().