Deixe-me primeiro falar sobre alguns entendimentos conceituais de HTTP e Socket:
O soquete é geralmente chamado de "soquete", usado para descrever o endereço IP e a porta.
Os tipos de soquete são divididos em:
1> Soquetes de streaming: fornecem serviços de transmissão de dados confiáveis e orientados para conexão, sem erros de dados, transmissão repetida e recebidos em ordem, com base no protocolo TCP.
2> Soquete estilo datagrama: Fornece serviço sem conexão, os dados são enviados de forma independente, nenhuma garantia livre de erros é fornecida e a seqüência de conexão deve ser desordenada, com base no protocolo UDP.
Socket é o encapsulamento e a aplicação do protocolo TCP / IP. Não é um protocolo em si, mas uma interface de chamada (API). Também pode ser dito que o protocolo TPC / IP é um protocolo da camada de transporte, que resolve principalmente como os dados são transmitidos na rede.
O protocolo HTTP também é chamado de protocolo de transferência de hipertexto
O HTTP é um protocolo de camada de aplicativo de conexão sem estado e sem conexão, que é composto de solicitação-resposta. É um modelo C / S padrão e resolve principalmente como empacotar dados.
A conexão HTTP usa o método "solicitação-resposta". Não apenas a conexão precisa ser estabelecida quando a solicitação é feita, mas também o cliente pode enviar uma solicitação ao servidor antes que o servidor possa responder aos dados.
Conexão HTTP e conexão Socket
Conexão de soquete: O servidor pode transmitir dados diretamente ao cliente até que as duas partes se desconectem.
Conexão HTTP: o servidor precisa esperar que o cliente envie uma solicitação antes de enviar os dados de volta ao cliente. O cliente envia uma solicitação de conexão ao servidor em intervalos regulares. Ele não apenas pode permanecer on-line, mas também "pergunta" se o servidor possui novos dados. Envie os dados ao cliente se estiverem disponíveis.
Depois de falar sobre tantas coisas conceituais, vamos examinar o uso específico desses dois métodos.
Primeiro, vamos examinar o uso do protocolo HTTP:
Os dois métodos de comunicação HTTP comumente usados são get e post. Vamos dar uma olhada nas semelhanças e diferenças entre esses dois métodos.
1> get é para obter (consultar) dados do servidor e post é para transmitir (modificar) dados para o servidor;
2> A quantidade de dados transmitidos por get é pequena e não pode ser maior que 2 KB, e a quantidade de dados transmitidos por correio é grande, o que geralmente é considerado ilimitado;
3> A segurança do get é muito baixa, geralmente não pode escapar de ferramentas poderosas de captura de pacotes como o Wireshark, mas a eficiência de execução é melhor; a segurança do post é relativamente boa;
Sugestão: use o método get ao fazer consulta de dados e use o método post ao adicionar, modificar ou excluir dados
A demonstração é a seguinte:
Definimos dois métodos em uma classe, um é a solicitação e o outro é a resposta:
Observe a realização do método:
Aqui, eu uso dois valores de tag para distinguir se devo usar get ou post. Podemos ver as semelhanças e diferenças entre esses dois métodos:
1> O método get conecta os dados diretamente ao verso do URL, e o método post separa o URL dos dados
2> Ambos os métodos chamarão de volta um método após solicitar o servidor, e o servidor retornará uma string JSON, independentemente de a solicitação ser bem-sucedida
Vejamos este método de retorno de chamada:
Por meio da string JSON retornada pelo servidor, podemos determinar se a solicitação foi bem-sucedida. Em geral, HTTP é um processo de solicitação e resposta.
Programação TCP e UDP em Socket
Fluxograma de conexão TCP:
1> Criar um soquete (soquete)
Soquete SOCKET (int af, int type, int protocol)
af: Especifique a família de endereços, o protocolo (TCP, IP) só pode ser AF_INET.
tipo: Especifique o tipo de socket (streaming ou datagrama).
protocolo: o protocolo com uma família de endereços específica, se for 0, o sistema selecionará automaticamente um protocolo adequado.
Se a chamada de soquete for bem-sucedida, ele retornará um novo soquete SOCKET, se falhar, retornará um erro.
2> Ligar o soquete a uma porta com um endereço local (ligar)
int bind (SOCKET s, const struct sockaddr FAR * name, int namelen)
s: o soquete a ser vinculado.
nome: especifica as informações de endereço local do soquete, que é uma variável de ponteiro para sockaddr.
namelen: Especifique o comprimento da estrutura do endereço.
3> Defina o soquete para monitorar o modo para receber solicitações do cliente (ouvir)
1
ouvir int (SOCKET s, backlog interno)
s: O soquete a ser monitorado.
backlog: O comprimento máximo da fila de espera pela conexão.
4> Aguardando a solicitação do cliente, quando houver uma solicitação, aceite a solicitação de conexão e retorne um novo soquete correspondente a esta conexão (aceitar)
SOCKET aceita (SOCKET s, struct sockaddr FAR * addr, int FAR * addrlen)
s: O soquete que foi monitorado.
addr: Ponteiro para um buffer, usado para receber o endereço da entidade conectada (o endereço IP e as informações da porta do cliente conectado).
addrlen: Ponteiro para um inteiro, incluindo o comprimento das informações de endereço.
5> Use o soquete recém-gerado para se comunicar com o cliente (enviar / receber)
função de envio:
int send (SOCKET s, const char FAR * buf, int len, int flags)
s: socket estabelecido.
buf: aponta para um buffer que contém os dados a serem transferidos.
len: o comprimento dos dados.
sinalizadores: 0
função recv:
int recv (SOCKET s, char FAR * buf, int len, int flags)
s: o soquete onde a conexão é estabelecida e pronto para receber dados
buf: salva os dados recebidos
len: comprimento do buffer
sinalizadores: afetam o comportamento das chamadas de função
6> Continue a esperar por outro pedido do cliente
7> Feche o soquete