rede de computadores --socket

Programação de Sockets

soquete de programação - Application Programming Interface (API)

Interface de Programação de rede

Application Programming Interface API (Application Programming Interface)

Application Programming Interface API: é o controle e controle do processo de aplicação do sistema operativo será uma interface chamada de sistema de transição.

Alguns típica interface de programação de aplicativo :

  • Berkeley UNIX sistema operacional define uma API, chamada tomada de interface (interface de socket), referido como um soquete (socket).
  • sistema operacional Microsoft usa sua interface com o API socket, uma forma ligeiramente diferente da API, e chamou Windows Socket Interface, WINSOCK.
  • AT & T UNIX System V para uma API definido, abreviado como TLI (Transport Layer Interface)

Programação de Sockets -socket API Overview

  • Originalmente concebida: para BSD UNIX-Berkley, para as interfaces da pilha de protocolos TCP / IP
  • Atualmente: de facto padrão da indústria, a grande maioria dos sistemas operacionais suportam
  • A interface do aplicativo API mais típica de rede Internet
  • Comunicação Modelo: cliente / servidor (C / S)
  • -Aplicação Inter processo de comunicação abstracção


Identificar pontos finais da comunicação (externas): Número + porta de endereço IP

Como operar a tomada de gerenciamento de sistema / processo (interno)? A: Descritor soquete (descritor de socket), um pequeno número inteiro

soquete abstrato

Semelhante ao arquivo de resumo quando o processo de aplicação cria um socket, o sistema operacional aloca uma estrutura de dados para armazenar informações sobre o soquete, voltou descritor de socket

estrutura de endereço

estrutura definida sockaddr_in:

structsockaddr_in
{
    u_charsin_len;       /*地址长度*/
    u_charsin_family;    /*地址族(TCP/IP:AF_INET)*/
    u_shortsin_port;  /*端口号*/
    structin_addrsin_addr;/*IP地址*/
    char sin_zero[8]; /*未用(置0)*/
}

Usando conjunto de protocolos TCP / IP da declaração de aplicações de rede endpoint variável de endereço, usando o sockaddr_in estrutura

função -socket API de soquete de programação

função API Socket (Winsock)

//WSAStartup
intWSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);
//WSACleanup
intWSACleanup(void);

aplicação de uso soquete deve primeiro chamar a função WSAStartup antes de usar soquete

  • O primeiro parâmetro indica que o programa pedido WinSock versão, em que o byte alto indicar a versão menor, o byte inferior indica a versão principal.
    • Hexadecimal de número inteiro, por exemplo 0x102 representa versão 2.1
  • O segundo argumento retorna as informações versão do WinSock real
    • Estrutura WSADATA ponteiro
//使用2.1版本的WinSock的程序代码段
wVersionRequested= MAKEWORD( 2, 1 );
err = WSAStartup( wVersionRequested, &wsaData);

Após a conclusão do aplicativo usando a solicitação de biblioteca de sockets, e, finalmente, a função WSACleanup chamada, os recursos do sistema UNBIND e tomada de libertação biblioteca ocupada soquete Biblioteca

sd= socket(protofamily,type,proto);

Criar um socket, o sistema operacional retorna soquete descritor (SD), o primeiro parâmetro (família de protocolos): protofamily = PF_INET (TCP / IP), o segundo parâmetro (tipo soquete): type = SOCK_STREAM,SOCK_DGRAM orSOCK_RAW(TCP/IPo terceiro parâmetros (número de protocolo): 0 é o padrão

//创建一个流套接字的代码段
structprotoent*p;
p=getprotobyname("tcp");
SOCKET sd=socket(PF_INET,SOCK_STREAM,p->p_proto);

Tomada tipo de TCP / IP orientada a serviços

  • TCP: fiável, orientada a ligação, a transmissão byte de fluxo, ponto
  • UDP: transporte de datagramas não confiável, sem conexão

int closesocket(SOCKET sd);

Fechar uma SD descritor de socket, se uma pluralidade de processos compartilham uma tomada, a tomada de contagem de referência closesocket por 1, é reduzido para 0 não está fechado, um processo de um soquete de multi-threaded não adianta contagem, se um processo de chamadas de rosca closesocket vai encerrar um socket, outros segmentos no processo não será capaz de acessar o soquete, o valor de retorno: 0: sucesso, SOCKET_ERROR: falha

int bind(sd,localaddr,addrlen);

A ligação de uma tomada de endereço ponto de extremidade local: número IP + porta de endereço

descritor de socket (sd), endereço de endpoint (o LocalAddr): Parâmetro

Os clientes geralmente não têm para chamar a função de ligação

Servidor: número de porta bem conhecido, endereço IP


int listen(sd,queuesize);

Oposto servidor tomada corrente secundária em estado de escuta, apenas as chamadas do servidor, somente para soquete de fluxo orientado a conexão

Definição de um tamanho solicitação de conexão fila (QUEUESIZE)

Valor de retorno: 0: SOCKET_ERROR sucedida: Falha

connect(sd,saddr,saddrlen);

Ligue para conectar o cliente para fazer a função socket cliente (SD) com um computador tomada porta específica particular (o saddr) a (serviço) de conexão, apenas para o cliente, o cliente pode ser usado para o cliente TCP UDP também podem ser usados final, o cliente TCP: estabelecer uma conexão TCP, UDP cliente: especificar o endereço de ponto final do servidor

newsock= accept(sd,caddr,caddrlen);

chamada de função programa de serviço aceitar uma fila de conexões tomada foi no topo da solicitação do cliente a partir de um cliente solicita uma tomada de corrente em um sd estado de escuta, e cria um novo socket para criar um canal de conexão de soquete com o cliente, única à tomada TCP, somente para servidor

O uso das tomadas recém-criados (newsock) para se comunicar com os clientes

send(sd,*buf,len,flags);

TCP função socket send (cliente e servidor), ou chamar a função de conexão de socket cliente UDP

sendto(sd,*buf,len,flags,destaddr,addrlen);

função sendto para o soquete do servidor UDP e ligar a função não é chamada socket cliente UDP

recv(sd,*buffer,len,flags);

servidor UDP recebe função Recv socket cliente recebe dados a partir do outro lado da conexão TCP, ou a partir de uma chamada de função de dados de conexão enviada pelo

recvfrom(sd,*buf,len,flags,senderaddr,saddrlen);

terminal de função recvfrom para receber dados da tomada de UDP com o servidor não chamar a função de conexão socket cliente UDP

int setsockopt(intsd, intlevel, intoptname, *optval, intoptlen);

função setsockopt () é usado para definir o parâmetro de opção do sd tomada

int getsockopt(intsd, intlevel, intoptname, *optval, socklen_t*optlen);

uma função getsockopt () é usado para obter qualquer tipo, qualquer estado do valor actual das tomadas de opção, e armazena o resultado optval

WSAStartup: inicializar a biblioteca de sockets (somente WinSock)
WSACleanup: claro / encerrar o uso da biblioteca de sockets (somente WinSock)
socket: cria socket connect: "Connect" servidor remoto (somente cliente)
closesocket: Divulgação / Fechar o bind soquete: bind um socket local endereço IP eo número da porta (normalmente o cliente não)
a escuta: soquete servidor TCP lado oposto é modo de escuta, e definir o tamanho da fila (somente servidor TCP socket)
aceite: aceitar / extrair uma solicitação de conexão, um novo socket é criado, o novo soquete (apenas para socket TCP do lado do servidor)
a recv: recebimento de dados (um soquete cliente TCP ou modo conectado soquete do UDP)
recvfrom: receber pacotes de dados (UDP soquete usado para o modo não-conectado)
Enviar: envia dados (socket TCP para o cliente ou o UDP soquete modo conectado)
o sendto: envio de pacotes de dados (UDP soquete usado para o modo não-conectado)
o setsockopt: set opção parâmetros tomada
getSockOpt: Get tomada parâmetro da opção

rede byte ordem

TCP / IP define uma representação padrão inteiro binrio de um cabeçalho de protocolo: ordem de bytes da rede (rede byte ordem), alguns parâmetros de função API de socket precisa de ser armazenado em ordem de bytes de rede (tal como endereço IP, número da porta, etc.)

ordem de byte nativa pode ser conseguida entre a função de conversão ordem de byte rede

htons: ordem de byte nativa → ordem de bytes da rede (16bits)
ntohs: → locais Pedido de bytes da rede de bytes (16 bits)
htonl: ordem de byte nativa → ordem de bytes da rede (32bits)
ntohl: ordem de byte rede local → ordem de byte (32bits)

aplicações de rede soquete API (TCP) para chamar fluxo básico

Tomada Programação - design de software cliente

Resolver o endereço IP do servidor

O cliente pode usar o nome de domínio (por exemplo .: study.163.com) ou endereço IP (por exemplo: 123.58.180.121) identifica o servidor, usando o protocolo IP requer um 32 bit endereço IP binário, é necessário converter o nome de domínio ou endereço IP é um endereço IP de 32 bits

A função inet_addr () decimais com endereço de IP para a conversão de endereços IP 32

gethostbyname função () domínio para alcançar a conversão de endereços de IP 32, ele retorna um ponteiro para uma estrutura hostent ponteiro

servidor resolução (conhecida) número de porta

O cliente também pode usar o nome de serviço (por exemplo, HTTP) identificador de porta do servidor, as necessidades de nome de serviço para ser convertido para o número da porta bem conhecido, a função getservbyname () retorna um ponteiro para uma estrutura servent ponteiro

Resolution Protocol No.

O cliente pode usar o nome do protocolo (por exemplo: o TCP) especificar o protocolo, as necessidades de protocolo a ser convertido em protocolo de resolução de nome (por exemplo: 6), com a função getprotobyname () implementar protocolo número de protocolo conversão nome, retorna um ponteiro para uma protoent estrutura ponteiro

Processo TCP Client Software

1. Determinar o endereço IP do servidor eo número da porta

2. Criar um socket

3. Atribuir endpoint endereço local (endereço IP + número da porta)

4. servidor Connect (socket)

5. Siga o protocolo da camada de aplicação para comunicação

6. Feche a conexão / releasable

Processo UDP Client Software

1. Determinar o endereço IP do servidor eo número da porta

2. Criar um socket

3. Atribuir endpoint endereço local (endereço IP + número da porta)

4. Especifique o endereço de ponto final do servidor, estrutura UDP datagrama

5. Siga o protocolo da camada de aplicação para comunicação

6. Feche / liberar o soquete

soquete de programação - design de software de servidor

4 tipos de servidor básico

  • No circuito de conexão (conexão iterativo) servidor
  • Circuito orientado à conexão do servidor (iterativo orientado a conexão)
  • Não há conexões simultâneas (sem conexão simultânea) servidor
  • Concurrent orientado a conexão (orientado a conexão simultânea) tipos básicos de servidores servidor 4

servidor sem conexão loop de fluxo básico

1. Criar um socket

2. endereço de terminal de ligao (INADDR_ANY + número de porta)

3 recebe repetidamente um pedido de um cliente

4. Siga a mensagem de resposta de configuração do protocolo da camada de aplicação transmitido para o cliente

transmissão de dados:

O servidor não pode usar a função connect (), servidor de conexão usando a função sendto () para enviar pacotes de dados

O acesso ao endereço de endpoint cliente: recvfrom Call () função quando receber dados, extrair automaticamente

servidor orientado a conexão processa o ciclo básico

1. Criar um soquete (principal), se ligam e número de porta conhecido;

2. Defina o modo de socket de escuta (principal) passivo, pronto para o servidor;

3. A chamada accept () função recebe a próxima solicitação de conexão (através da tomada principal), cria um novo socket para estabelecer uma conexão com o cliente;

4. Seguir o protocolo da camada de aplicação, o cliente recebe o pedido repetidas, construções e envia uma resposta (via o novo socket);

5. Depois de serviço para um cliente em particular, fecha a ligação entre o cliente e volta ao passo 3. O servidor orientada a ligação processa o circuito básico

servidor sem conexão fluxo básico Concurrent

O segmento principal 1: criar uma tomada, de ligação e o número da porta bem conhecido;

O thread principal 2: repetidamente chama recvfrom () para receber a próxima solicitação do cliente, e cria um novo segmento em resposta ao processo do cliente;

1 fio criança: receber um pedido particular;

segmento de criança 2: De acordo com a mensagem de resposta de configuração do protocolo da camada de aplicação, e chama a transmissão sendto ();

segmento de criança 3: Exit (a sub-thread processar um pedido após o término)

processos do servidor orientado a conexão simultânea do básicas

O segmento principal 1: Criar o soquete (principal), se ligam e número de porta conhecido;

O thread principal 2: Definir modo de escuta socket passivo (principal), pronto para o servidor;

A principal linha 3: repetidamente chamada accept () função recebe a próxima solicitação de conexão (através da tomada principal), e cria um novo segmento de criança em resposta ao processo do cliente;

rosca 1 criança: receber uma solicitação de serviço ao cliente (pelo socket recém-criado);

segmento de criança 2: Seguindo o protocolo de camada de aplicação para interagir com um cliente particular;

segmento de criança 3: Desligue / liberar a conexão e sair (terminação thread)

exemplo

DIA ciclo servidor sem conexão

servidores orientados a conexão concomitantemente DIA

Acho que você gosta

Origin www.cnblogs.com/ygjzs/p/12422107.html
Recomendado
Clasificación