O soquete também é chamado de "soquete". Os aplicativos geralmente enviam solicitações à rede ou respondem às solicitações da rede por meio de "soquete", para que hosts ou processos em um computador possam se comunicar.
Neste capítulo, ensinaremos como usar o serviço Socket na linguagem Perl.
Use a função socket para criar um serviço de soquete.
Use a função bind para vincular a porta.
Use a função listen para escutar a porta.
Use a função de aceitação para receber solicitações de clientes.
Use a função socket para criar um serviço de soquete.
Use a função connect para conectar-se ao servidor de soquete.
O diagrama a seguir demonstra o processo de comunicação entre cliente e servidor:
Em Perl, usamos a função socket() para criar um soquete. O formato da sintaxe é o seguinte:
soquete(SOQUETE, DOMÍNIO, TIPO, PROTOCOLO);
Análise de parâmetros:
O soquete criado por DOMAIN especifica o conjunto de protocolos. Por exemplo:
AF_INET
representa protocolo de rede IPv4
AF_INET6
significa IPv6
AF_UNIX
significa soquete local (usando um arquivo)
TYPE Os tipos de soquete podem ser classificados como SOCK_STREAM ou SOCK_DGRAM dependendo se são orientados a conexão ou não.
PROTOCOLO deve ser (getprotobyname('tcp'))[2] . Especifica o protocolo de transporte real usado.
Portanto, o método de chamada da função socket é o seguinte:
usar Socket # Define PF_INET e SOCK_STREAMsocket(SOCKET,PF_INET,SOCK_STREAM,(getprotobyname('tcp'))[2]);
Use bind() para atribuir um endereço ao soquete:
vincular(SOQUETE, ENDEREÇO);
SOCKET Um descritor de soquete. ADDRESS é o endereço do soquete (TCP/IP) contendo três elementos:
Cluster de endereços (TCP/IP, é AF_INET, provavelmente 2 em seu sistema)
Número da porta (por exemplo, 21)
Endereço de rede (por exemplo, 10.12.12.168)
Depois que um soquete é criado usando socket(), apenas o protocolo usado é fornecido a ele e nenhum endereço é atribuído. Antes de aceitar conexões de outros hosts, bind() deve ser chamado para atribuir um endereço ao soquete.
Um exemplo simples é o seguinte:
use Socket # PF_INET e SOCK_STREAM são definidos $port = 12345; # Porta de escuta $server_ip_address = "10.12.12.168";bind( SOCKET, pack_sockaddr_in($port, inet_aton($server_ip_address))) ou die "Não é possível vincular a porta! n";
ou die é executado após falha na vinculação do endereço.
A configuração da porta pode ser reutilizada imediatamente definindo a opção setsockopt() SO_REUSEADDR.
A função pack_sockaddr_in() converte o endereço em formato binário.
Depois que o soquete for vinculado a um endereço, a função listen() começará a escutar possíveis solicitações de conexão. No entanto, isso só pode ser usado quando um fluxo de dados confiável for garantido:
ouvir(SOCKET, QUEUESIZE);
SOCKET: Um descritor de soquete.
QUEUESIZE: É um número inteiro que determina o tamanho da fila de escuta. Quando uma solicitação de conexão chegar, ela entrará na fila de escuta quando uma solicitação de conexão for aceita por accept(); a fila está cheia, uma nova conexão A solicitação retornará um erro.
Depois que a conexão for aceita, 0 será retornado em caso de sucesso e -1 em caso de erro.
A função accept() aceita a conexão de soquete solicitada. Retorna a forma compactada do endereço de rede se for bem-sucedido; caso contrário, retorna FALSE:
aceitar(NEW_SOCKET, SOCKET);
NEW_SOCKET: Um descritor de soquete.
SOCKET: Um descritor de soquete.
accept() geralmente é usado em loops infinitos:
enquanto(1) {aceitar(NEW_SOCKET, SOCKT);
O exemplo acima pode monitorar solicitações de clientes em tempo real.
A chamada do sistema connect() configura uma conexão para um soquete. Os parâmetros são um descritor de arquivo e um endereço de host.
conectar(SOQUETE, ENDEREÇO);
O seguinte cria uma instância conectada ao soquete do servidor:
$port = 21; # porta ftp $server_ip_address = "10.12.12.168"; connect( SOCKET, pack_sockaddr_in($port, inet_aton($server_ip_address))) ou die "Não foi possível vincular a porta! n";
A seguir, usamos um exemplo completo para entender a aplicação de todas as funções de soquete:
Código server.pl do servidor:
Abra um terminal e execute o seguinte código:
$ perl sever.pl início de acesso: 7890
Código client.pl do cliente:
Abra outro terminal e execute o seguinte código:
$ perl client.plEu sou a informação do servidor