Loading

Module 1: Transmissão e Programação

Nota de Estudos
Study Reminders
Support
Text Version

Programação Socket

Set your study reminders

We will email you at these times to remind you to study.
  • Monday

    -

    7am

    +

    Tuesday

    -

    7am

    +

    Wednesday

    -

    7am

    +

    Thursday

    -

    7am

    +

    Friday

    -

    7am

    +

    Saturday

    -

    7am

    +

    Sunday

    -

    7am

    +

Programação de Soquetes
Bem-vindo de volta ao curso em rede de computadores e protocolo de internet. Então, hoje nósveremos algum demo da programação da rede. Assim, vamos analisar a programação do soqueteem detalhes. E veja que com a ajuda da programação de socket, como você podeacessar a camada de transporte da pilha de protocolo, e você pode executar o seu próprio aplicativo emtopo da pilha de protocolo de rede para transferir alguns dados para ou a partir de um computador.(Consulte o Tempo do slide: 00:47)Então, vamos iniciar nossa jornada na programação do soquete. Então, para começar como vimosmais cedo ou também já discutimos anteriormente que toda esta pilha de protocolos de rede éimplementada dentro do kernel do sistema operacional. Por isso, em geral temos cinco camadasna pilha de protocolo TCP/IP que já falamos. E na isso cinco camadas doprotocolo TCP/IP empilam esta camada física, e a parte da camada de link de dados são armazenadasdentro do hardware.Considerando que a parte superior da camada de link de dados principalmente uma parte do MAC e o controle de link lógico, a camada de rede e a camada de transporte são implementadas dentro do espaço do kerneldo sistema operacional. E então a partir do espaço do usuário é possível gravar vários aplicativospara acessar esta pilha de protocolos. Por isso, o aplicativo tem que interagir com a camada de transportepara enviar ou receber dados. E como aprendemos já que na camada de transporte, temos dois protocolos diferentes, o protocolo de controle de transmissão ou oTCP e o protocolo de datagrama do usuário ou UDP.Então, hoje vamos analisar que todo esse espaço do kernel que está lá dentro que nóstemos essas diferentes camadas da pilha de protocolo, a camada de transporte, camada de rede e a parteda camada de link de dados que já está implementada dentro do kernel do sistema operacional. E veremos que como você pode fazer uma interação entre esse espaço do usuário ea pilha de protocolo implementada dentro do espaço do kernel com a ajuda da programação do soquete. Agora, curiosamente o que veremos que sempre que você vai escrever um aplicativo, aplicativo de rede no espaço do usuário, você tem que transferir ou você tem que usardeterminado tipo de funcionalidades que estão disponíveis no kernel.Então, você requer uma intervirada entre o espaço do usuário e o espaço do kernel. E lembre-se deque aqui estamos falando de um sistema operacional baseado em UNIX. E, em um sistema operacional baseado em UNIXa partir do espaço do usuário para o espaço do kernel que a interação será feita como conjunto de APIs que chamamos como chamada de sistema. Assim, a chamada do sistema transfere algum requisito do usuáriopara as operações do kernel correspondentes do kernel e executou operações emo kernel Linux ou UNIX. Assim, toda essa pilha de protocolos que é implementada dentro do kernelfaremos uma interação com aquela pilha de protocolos de rede com a ajuda das chamadas de sistema operacional.Então, interessante apenas um ponteiro para você explorar mais adiante que você pode olhar para toda essa implementação de pilha de protocolodentro de um kernel UNIX. Se você baixar a fonte do kernel do UNIXdentro da fonte do kernel do UNIX, você poderá verificar o módulo net sob a fonte de usuárioLinux net. E você pode ver toda essa implementação da pilha de protocolos do kernel lá.(Consulte o Tempo do slide: 03:51)Então, essas coisas que você já aprendeu sobre essa pilha de protocolo TCP/IP na camada de transporteela faz multiplexação da camada de aplicativos. Você pode executar vários aplicativos emdispositivos diferentes. Agora, aplicativo diferente pode executar diferentes tipos de protocolos. Então, sevocê estiver tendo um aplicativo de navegação ou HTTP que executará o TCP. Se você tem um arquivo de transferência de arquivoou FTP tipo de aplicativo que pode voltar a executar TCP. Se você tem algum aplicativocomo VoIP, que pode utilizar UDP.Agora, todas essas diferentes instâncias de camada de transporte da pilha de protocolo que interagem coma camada IP. Agora, sempre que você estiver falando entre dois dispositivos a camada IP fica alteradae sempre que estiver tendo vários aplicativos que estão rodando em cima de sua camada de IPou na camada de rede da pilha de protocolos, eles ficam multiplexados com a ajuda detipo diferente de protocolo. Assim, para diferenciar entre dois dispositivos na camada IP, utilizamoseste endereço IP. Na palestra subsequente, sempre que discutirmos sobre camada IP, iremosdiscutir sobre como você pode configurar esses endereços IP. Por isso, por enquanto apenasentender que diferentes dispositivos, eles são separados pelos endereços IP. E então no lado do aplicativo, temos esses números de porta que realmente o ajudam a fazer a aplicaçãoda camada multiplexing.Então isso significa, sempre que falamos sobre aquele dispositivo A está se comunicando com o dispositivo Bdurante esse tempo, é realmente se você está fazendo algum tipo de aplicativo de navegação queestá usando protocolo HTTP durante esse tempo o dispositivo A, o aplicativo que está usando o protocolo TCPem uma porta 8081 na máquina com endereço IP 202.141.81.2, ele éinteragindo com o dispositivo B no endereço IP 203.12.23.43 sobre uma porta 8080, onde está o seu servidor HTTP em execução.Da mesma forma, para o outro aplicativo que forma esse aplicativo rodando no dispositivo A eaplicativo executando um dispositivo B eles podem ser segregados com a ajuda daquele número da porta.E lembre-se que sempre que falamos sobre esse tipo de aplicação em um sistemabaseado em UNIX, basicamente representamos na forma de um processo. Então, há vários processosque estão rodando em máquinas diferentes. E esses processos querem quese comuniquem uns com os outros e durante esse tempo fazemos ou asseguramos esse processo paraprocessar comunicação com a ajuda daquela camada de transporte da pilha de protocolos.Então, esse processo para processar a comunicação é alcançado com a ajuda deste endereço IP,que está lá na camada IP para identificar com exclusividade uma máquina na rede. E então em uma máquinahá vários processos em execução, eles podem usar protocolos diferentes. Alguns deos processos podem utilizar o protocolo TCP, alguns do processo podem utilizar o protocolo UDP, portantoque são segregados com a ajuda dos números de porta.Agora, vamos ver o que é um socket. Sendo assim, socket é basicamente uma conexão lógica de um processopara outro processo. Então, aqui você pode ver que esses dois aplicativos de navegação emos dois dispositivos eles estão se comunicando uns com os outros. Então, temos o socket onesocket-este soquete vermelho que está fazendo um tubo lógico entre o aplicativo que érodando na porta 8081 na máquina 202.141.81.2 em uma máquina onde o correspondentefinal desse cano está rodando em uma porta 8080 em uma máquina com endereço IP 203.12.23.43. Assim,dessa forma, podemos ter vários tubos lógicos na camada de transporte que chamamos comoo socket.Agora, o envio dos dados pela internet significa enviar os dados sobre esses canos lógicos.Então, esses canos lógicos que chamamos como socket eles basicamente criam essa conexão de ponta a finalizarem caso de TCP ou fim para finalizar a semântica de transmissão de dados em caso de UDP paratransferir os dados de uma máquina ou melhor para dizer um processo rodando em uma outra máquina.(Consulte o Tempo do slide: 08:29)Então, aqui deixe-nos ver que como podemos implementar tal soquete em um sistema baseado em UNIX.Então, para isso usamos esse conceito de programação de socket. Assim, em uma programação de soquete, temos um conjunto de chamadas de sistema que podemos executar a partir do programa C. Eessas chamadas de sistema nos ajudarão a obter o serviço a partir da pilha de protocolo TCP/IP que éimplementada dentro do módulo net do kernel do SO.Então, vamos ver que como funciona toda essa coisa. Por isso, na camada de transporte, estamos falandosobre um servidor cliente esta programação. Então, temos um servidor em que a ideia é que o servidortenha aberto uma porta, anunciou a porta que esta determinada porta estou ouvindo eo cliente precisa fazer uma conexão com aquele porto específico.Agora, nesse caso como o servidor realmente funciona. Então, no lado do servidor, você tem que primeirofazer uma chamada de sistema de socket. Assim, a chamada do sistema socket, criará o lado do servidorabertura do tubo lógico e ele irá ligar o socket com a sua pilha de protocolos TCP/IP.Então, para ligar o socket com a pilha de protocolos TCP/IP, é preciso chamar esta função de ligação.Então, esta função de ligação, o que ele fará que com o número da porta que você está especificando ele irá ligar aquele número da porta com o socket, de modo que irá criar uma extremidade lógica da conexãono lado do servidor.Então, basta pensar no servidor desta forma que o servidor está sempre em execução, e o servidorrealmente precisa anunciar que ei, eu estou na verdade ouvir nessa porta em particular, digamos porta8080. Então, se alguém quiser falar comigo, você pode enviar dados na porta 8080. Então, esse anúnciovocê tem que fazer através dessa ligação e uma chamada de sistema de atendimento que temosaqui. Assim, a chamada de sistema de ligação realmente liga a porta com a extremidade socket correspondente,e a chamada do sistema de atendimento irá ajudá-lo apenas a fazer o servidor ir no estado de atendimento.Então, o servidor agora é dizer ligar aquela porta 8080, e ela está atendendo a conexãorecebida.Agora, vamos nos mover para o lado do cliente. No lado do cliente você tem a chamada do sistema socket. Assim,esta chamada de sistema de soquete novamente cria um lado do cliente final do tubo lógico. E depois disso noum site cliente você não requer essa ligação e escuta, pois basta entender a natureza dea comunicação entre o servidor e o cliente. Então, o servidor é na verdadeanunciando ou fazendo um anúncio que hey, eu estou ouvindo neste porta 8080. Então,qualquer um quer se conectar a mim, você pode me conectar diretamente na porta 8080 que o clientenão precisa saber porque o cliente está realmente iniciando a conexão com o servidor.Porque o cliente está iniciando a conexão com o servidor, o cliente não precisafazer tal tipo de anúncio. Então, o cliente pode apenas iniciar a conexão com a portaque está sendo anunciada pelo servidor e é por isso que você não requer a ligaçãoe a chamada de atendimento no lado do cliente. Assim, no lado do servidor, você requer a ligação e a chamadade atendimento para que o servidor possa se ligar a uma porta a uma porta fixa e ele pode anunciaraquela porta fixa para fora que qualquer um pode se conectar a essa determinada porta criando umsocket.Agora, depois que estas coisas são feitas, após ter criado o final do socket no lado cliente, do lado do cliente você faz esta chamada de conexão para iniciar uma conexão com a portanúmero que é anunciado pelo servidor. Agora, essa é na verdade um tipo de coisas bem conhecidas, como dizer você sabe que se você estiver executando um servidor HTTP, então você também estárodando na porta 80 ou você está rodando na porta 8080 ou em alguma outra portas que está sendoanunciada pelo servidor. Então, o cliente já sabe que o que é o endereço IP ondeo servidor está rodando e qual é o número da porta onde o servidor está em execução. Então, o clienteinicia uma chamada connect lá e este connect faz uma conexão em direção ao servidor. Então, uma vez que o servidor obtenha essa conexão, ele faz uma chamada de aceite.Agora, em caso de um tipo de protocolo TCP dentro que se conecta e aceite, você tem o procedimento de handtremendo TCPtrês que nós discutimos. Então, o cliente inicia a conexãoenviando um pacote SYN, o servidor aceita a conexão retornando de voltaum ACK; e também iniciando a conexão com o lado do cliente enviando outro SYN. Então,estamos tendo um SYN mais ACK do servidor para o cliente e, então, finalmente, o clienteenvia uma confirmação, de modo que por meio desta três forma o handtremendo do TCPque acontece sempre que você estiver fazendo esta chamada do sistema de conexão no lado do cliente eaceitar chamada no lado do servidor para fazer a conexão em caso de um TCP.Agora, uma vez que esta conexão seja estabelecida, então você pode fazer esta chamada e receber chamada paraenviar os dados e receber os dados. Assim, sempre que você estiver fazendo uma chamada de envio, ele está enviandoos dados; na outra ponta você pode receber esses dados fazendo uma chamada de sistema de recebimento ouvocê pode fazer um envio para o lado do servidor para enviar alguns dados do servidor para o cliente. E o cliente aceita que dados desta chamada de sistema de recebimento. Então, uma vez que esses dadosa comunicação é feita, então você faz esta chamada fecunda, finalmente a chamada fecunda para fechar a conexão correspondente, assim, dessa forma todo esse fluxo de obras de programação de socket.Agora, deixe-nos olhar para isso como você realmente irá gravar esta chamada de sistema no formato de uma sintaxeC.(Consulte o Tempo de Slides: 14:07)Então, iniciaremos com diferentes tipos de sockets como já discutimos há muito tempo que a interneté um tradeoff entre o desempenho e a confiabilidade e é por isso que temos doisprotocolos diferentes na camada de transporte, o controle de transmissão protocolo ou TCP ou o protocolo de datagramas do usuárioe o UDP. Agora, algum aplicativo eles exigem multa engrandecerdesempenho como os aplicativos multimídia e alguns outros requer confiabilidade como uma transferência de arquivos. E, assim, temos dois serviços como um protocolo de transmissão confiávelou tipo TCP de protocolo e o protocolo de transmissão não confiável como um que é o protocolo UDP.Agora, assim temos estes dois tipos diferentes de soquetes; um soquete que chamamos como o soquete de fluxoque é iniciado por fluxo de meia. Então, esse fluxo de meia é, crie um soqueteque é confiável e orientado a conexão. Então, ele é necessariamente um tipo TCP de soquete. Ema outra mão, temos este soquete baseado em UDP que é pouco confiável e conectionlessque chamamos como um soquete de datagrama, que é denominado como SOCK_DGRAM, de modo que assim nóstemos dois amplos tipo de soquete, soquete de fluxo e o soquete do datagrama.Além disso temos um terceiro tipo de soquete que é chamado de soquete bruto. Usando o soquete bruto, você pode realmente contornar a camada de transporte e você pode diretamente, por sua vez, interagircom a camada IP. Então, nós não vamos discutir essa enquete crua aqui em detalhes. Nós somosindo dar uma visão geral sobre esse soquete de fluxo e o soquete do datagrama.(Consulte o Tempo do slide: 15:35)Agora, sempre que estiver declarando um socket, assim, o que você pode fazer você pode declarar uma variável de número inteiro de duas variáveis número inteiro chamado inteiro tipo de variável que seguram o id de socket que vocêvai definir. Então, essa chamada de sistema de soquete leva esses parâmetros, três parâmetros-o domínio, o tipo e o protocolo. Agora, ele cria um socket com esta chamada de sistema socket.Agora, este parâmetro de domínio é o domínio de comunicação. Normalmente, utilizamos o protocolo IPv4ou endereço IPv4. Então, nós definimos esse valor de domínio como AF_INET que é um padrãopara o tempo sendo a maior parte do tempo você vai usar AF_INET. Você sempre pode explorar o quesão as outras possibilidades neste campo de domínio.Então o tipo do campo ele é tipo de soquete ou datagrama SOCK ou SOCKbaseado em se você vai criar um socket TCP ou um soquete UDP. E, finalmente, o protocoloespecifica a família de protocolo que nós vamos utilizar. Geralmente ele é configurado para 0. Então, euvai sugerir que você explore isso que por que definimos o campo de protocolo em 0 na maioria dos casos.Agora, uma vez que a chamada do sistema socket é feita, você criou o soquete. No site do servidorvocê tem que criar as próximas chamadas para ligar, para ligar a porta ao socket particular. Então, essa chamada de sistema de ligaçãofunciona desta forma ele retorna o status se a ligação é bem-sucedida ounão. Assim, você pode ter o status como variável inteira. E a ligação leva três parâmetroso id do socket. O id de socket que é retornado por esta chamada de sistema de socket e sim o id de socketque é retornado por esta chamada de sistema de socket, portanto, este valor s é o id de socket que temfoi retornado que você pode colocar aqui.Agora, aquele socket específico é ligado a uma porta de endereço tipo de variável que é uma estrutura.Então, esta estrutura contém estrut sockaddr em. Então, essa estrutura contém o endereço IPe a porta da máquina. Então, geralmente configurado para inaddr qualquer um para escolher um endereço local. Assim, sevocê for executá-lo como inaddr qualquer, ele escolherá o endereço IP que é usado por sua máquinae, em seguida, o tamanho. Então, o tamanho é o tamanho do endereço de, assim, essa estrutura de sockaddr.
Programação de Soquetes-Parte 2
Então, a estrutura sockaddr parece algo assim, que realmente armazena o endereço IPe o número da porta correspondente. Tem esses três campos, um é a família do pecado. Então, esteé a família de endereços. Por isso, a família de endereços a mantemos como AF INET para o protocolo IPv4que vamos utilizar. Então, esse conceito de IPv4 nós vamos discutir na palestra subsequente do. Então, quando falamos sobre o esquema de endereçamento IP, tão normalmente emgeral na rede de hoje ’ s rede utilizamos principalmente endereço IPv4. Assim, as famílias de endereçosnormalmente configuram a AF INET. .Então temos este soquete em endereço ponto s addr é o endereço de origem. Então, o endereço de origema mantemos como inaddr qualquer como eu mencionei para escolher o endereço local da máquinaonde estou executando o código. E então eu tenho o número da porta nas variáveissin porta o número da porta. Então, agora um fato interessante é aqui que precisamos usar essa funçãochamada h para ns para converter o número da porta da ordem de byte de host para a ordem de byte de rede. Agora, vejamos rapidamente que o que é a ordem de byte de origem e o byte de redeordem.(Consulte o Tempo do slide: 19:25)Então, em um sistema de computador, o computador pode ser de dois tipo ou pode ser um sistema pouco endianou pode ser um grande sistema endian. Agora, a diferença entre um sistema pouco endianou um grande sistema endian é algo assim. Sim, é como como você está armazenandoos dados na memória. Agora, em caso de um sistema pouco endian, você armazenará os dadosda esquerda para a direita arrependido da direita para a esquerda. Então, este 0D será armazenado rápido então ele armazenará0C, então ele armazenará 0B e, finalmente, ele armazenará 0A.Considerando que, em um grande sistema endian, ele é exatamente oposto. Então, é deixado para a direita associatividade meiodas coisas. Então, em um cadastro se seus dados são algo assim, na memória ele irá primeiroarmazenar 0A, então ele armazenará 0B, então ele armazenará 0C e finalmente, ele armazenará 0D. Então, queway dependendo se a sua máquina está seguindo uma plataforma pouco endian ou uma grande plataforma endian, a representação dos dados dentro da memória pode ser alterada.Então, assuma uma comunicação de um pequeno endian a um grande sistema endian. Agora, se você estivertransferindo dados de um sistema pouco endian, você transferirá os dados na forma de um fluxo de bytesna sequência de bytes. Então, você vai primeiro dizer e possivelmente 0D, depois 0C,então 0B, então 0A. E sempre que ele grande endian sistema obterá 0D, ele colocará o 0D primeiro,então o 0C segundo e dessa forma sempre que ele irá interpretar ele interpretará o númeroapenas na direção contrária. Então, dessa forma pode haver uma espécie de inconsistênciasempre que você está transferindo o sistema, então é por isso que usamos esse conceito de byte de postpara a ordem de byte de rede, a ideia é que o host pode ser pouco endian ou big endian.(Consulte o Tempo do slide: 20:57)Eles possuem uma espécie de ordem de byte. Agora, a rede é uma ordem de bytes fixa. Assim, sempre quevocê estiver transferindo os dados sobre a rede, você converte-o da ordem de byte host paraa ordem de byte de rede, transfira-a sobre a rede. Na outra ponta, você busca os dadosconverte-o novamente na ordem de byte host com base em se o seu sistema é pouco endian ougrande endian e armazená-lo lá. Assim, dessa forma esse tipo de inconsistência que pode vir a dever-seà diferença de representação de duas máquinas que podem ser solucionados. Então essa é a ideia deconverter o número da porta a partir da ordem de byte host para a ordem de byte de rede.Então, aqui está um exemplo como você pode iniciar a variável de endereço. Então, você setup a portaem 3028 que é você está tomando ele como uma variável inteira então você tem essa família sin AFINET que eu discuti, sin address dot aborda inaddr qualquer para tirar o endereçolocal. Se você quiser pode também colocar algum endereço IP lá mas que o endereço IP necessário paraseja correspondido com o endereço IP usado por sua interface de rede. E então na porta sinvocê faz esta chamada para h para ns sobre o número da porta para converti-lo para a ordem de byte de rede.(Consulte o Tempo do slide: 22:15)Bom, agora para aceitar uma conexão de soquete, assim você no lado cliente você cria um endereço cliente. Agora, o servidor que está ouvindo neste soquete em particular. Então, essa função de escutatem um parâmetro chamado 5 aqui. Então, este parâmetro específico indica que quantasconexão máxima pode ser backlog quando vários clientes estão tentando se conectar ao servidor. E então você toma esse tamanho dessa variável de endereço que você declarou efaz uma chamada de aceite. Então, essa chamada de aceite levará o meia fd onde o socket está atendendoo endereço do cliente que será fornecido. Assim, quando o cliente vai ficar conectado o endereçodo cliente será armazenado nesta variável, e o comprimento desse endereço do cliente.Agora, esta chamada de aceite sempre que estiver iniciando uma conexão como mencionei queo servidor precisa sempre no modo em que ele está aguardando qualquer conexão recebidae os clientes precisam iniciar a conexão. Sendo assim, assim temos dois tipos de conexãochamada ativa aberta e a aberta passiva. Agora, como mencionei que o servidorprecisa anunciar que endereço permanece no estado aberto e aguarda por qualquer conexãorecebida, de modo que seja o tipo de aberto passivo. E o cliente ele só abre uma conexãoem que há necessidade de transferência de dados que é o tipo de abertura ativa. E a conexãoela é inicializada pelo cliente.(Consulte o Slide Time: 23:41)Agora, estes são o formato de transferência de dados. Sendo assim, temos dois tipos diferentes de soquete; o soquete de fluxoe o soquete datagrama. Em caso de um soquete de fluxo, você pode usar a funçãochamada read and write fornecendo o identificador socket. Então, aqui está um fato interessantede que sempre que você está aceitando uma conexão, você está recebendo um novo id de soquete. Então, por que você está obtendo um novo socket id, porque o servidor está atendendo em um soquete; agora quando o cliente está iniciando pode haver vários clientes que sãoconectando-se simultaneamente. Agora, quando vários clientes estão se conectando simultaneamente,você precisa criar um tubo lógico separado para separar cliente, de modo que são realmente indicadospelo endereço de socket que é escrito por esta chamada de sistema de aceite.Então, a chamada do sistema de aceite retornará um endereço e esse endereço específico seráatribuído ao novo sock fd e enquanto você estiver enviando os dados você usa aquele novo socketid porque isso criou fim de fluxo de ponta ou end to end pipe para um cliente específico evocê enviará uma mensagem. Assim, para o tipo stream de socket, você pode usar a função de leitura e a de gravaçãopara ler dados de um buffer ou para gravar dados em um buffer. Para o soquete do datagramavocê pode usar a função chamada de recepção e enviar para; receber defunção para receber dados do socket ou enviados para funcionar para enviar dados para aquele determinadosocket.(Consulte o Tempo do slide: 25:09)Agora, aqui estão alguns, então eu mostrarei a você alguma demo de toda a coisa. Então, aqui está algum linkque você pode seguir para aprender programação de soquete em mais detalhes. Então, o que eu vousugere que você vá a esses links particulares e comece a escrever sua própria programação de redeusando o soquete. Então, vamos rapidamente a alguma demo de toda essa ideia deprogramação de soquete.(Consulte o Tempo do slide: 25:37)Então, primeiro olharemos para o servidor UDP e um cliente UDP correspondente. Então, vamos abrirolhar para o servidor UDP primeiro.(Consulte o Tempo de Slide: 26:05)Então, aqui está o seu código para o servidor UDP. Então, no código do servidor UDP, você pode ver quenós incluímos algum cabeçalho, estes são o tipo de cabeçalhos padrão que temos queincluir. E então dentro da função principal, estamos declarando a coisa toda. Então, na função principal, temos isso nós estamos definindo primeiramente um socket, que é o estruturt sockaddr eme o endereço do servidor correspondente. Em seguida, estamos definindo um identificador de soquete. E nósestamos definindo um número de porta.Agora, aqui este nós estamos primeiro fazendo uma chamada de sistema de socket. Na chamada do sistema socket, vocêtem esta AF INET o parâmetro que mencionamos precisamos especificar os dadosgram socket. Nós estamos especificando porque estamos tentando criar um soquete UDP e parâmetro finalé igual a 0. O parâmetro 0 que enviamos para o campo de protocolo que temosmencionado. Em seguida, uma vez que o socket é criado, se houver um erro, imprimimos alguma mensagem de erro.(Consulte o Tempo do slide: 27:17)Caso contrário declaramos o endereço do servidor como já falamos anteriormente. Por isso, declaramos comoa família de protocolo como AF INET o endereço como inaddr qualquer com um endereço desta máquinae depois o número da porta. Em seguida, fazemos a chamada do sistema de ligação. A chamada do sistema de ligação é paraligar o soquete com o número da porta correspondente que estamos especificando como um argumento de linha de comandos. E, finalmente, fazemos uma chamada para uma função chamada setsockopt, este setsockopté para configurar alguma opção para o socket, aqui nós definimos a opção é so_reuse addr. Este addr deso_reuse vai nos ajudar a usar a mesma porta para várias conexões juntas e quenão é uma ideia segura, mas em algum momento você pode usar isso.Então, o que você pode fazer uma vez que tenha criado o socket no lado do servidor, você pode diretamentefazer a chamada para o recebimento da função para receber os dados. E isso receber da funçãoconterá os detalhes do cliente. Então, este é o endereço do cliente que fica claro na função de formulário de recebimento. E uma vez que você está recebendo dados estamos imprimando alguns dados efazendo um envio para chamada. Então, este envio para chamada é o envio dos dados para o cliente correspondente,para que seja a porta no lado do servidor.Depois disso estamos criando o endereço do servidor usando que configurar a família sin o endereço do hoste a porta do servidor. Então, o valor que estão sendo fornecidos pelo cliente noo através da linha de comando. Assim, após isso uma vez que você tenha o endereço do servidor, novamentevocê não precisa iniciar uma conexão, você pode fazer diretamente o envio para chamar para enviaralguns dados. Então, a partir daqui estamos fazendo um envio para ligar. Então, este envio para chamada está enviando os dadospara o socket particular com este endereço do servidor que estamos especificando aqui.Então, agora vamos primeiro executar o servidor. Então, de acordo com a nossa sintaxe nós que somos temos que executaro servidor e especificar um endereço de porta onde o servidor irá conectar a si mesmo a ligação através dea chamada do sistema de ligação. Então, vamos dar o número do porto como 2333. Então, o servidor agora estáem execução. Agora, a partir do lado do cliente podemos executar o cliente. E estamos executando o servidorna mesma máquina, portanto, o nome do host do servidor você pode dar como host local. E paravocê está executando o servidor na porta 2333; na porta 2333, assim podemos fornecer a porta do servidorcomo 2333. Então, ele tem enviado uma mensagem para o servidor você pode ver que o servidor temrecebeu a mensagem do cliente e está retornando de volta essa mensagem. Então, o clienterecebeu a mensagem e imprimiu.Então, você pode novamente executar o cliente. E você pode ver que ela recebeu uma mensagem. Agora,observe a nota uma coisa aqui você está imprida o IP do servidor o IP do cliente e a porta do cliente, o IP do cliente é o IP local desta máquina. E uma porta cliente sempre que estamosexecutando vários cliente, o código do cliente fica alterado. Agora, ao lado do cliente como o clientenão se liga à nossa porta bem conhecida durante o tempo de execução, o cliente escolhe aleatoriamenteum endereço de porta e iniciam a transferência do cliente daquele endereço de porta em particular, de modo que épor que um diferente executado o endereço de porta é alterado.Então, se eu executá-lo novamente múltiplo vez em horário diferente, o endereço de porta será alterado. Assim, eminstâncias diferentes é preciso porta diferente. Então, esta é uma demo sobre o servidor UDP e um clienteUDP que é a forma possivelmente mais simples da programação do soquete. Vamoscompartilhar o código com você, nós solicitaremos que você navegue pelo código executado em sua máquina própriae veja o que está acontecendo e entenda mais detalhes. Assim, na próxima classe, mostraremos a demo sobre o servidor TCP, cliente TCP e algumas variantes deservidor TCP e o cliente TCP.Obrigado a todos por frequentar a classe.