Rafael Costa Fiorentini · Transcript · · Updated
Trabalho Redes Socket – Transcript
Video by Rafael Costa Fiorentini · Watch the original on YouTube
Summary
AI-generated from the transcript. Verify details against the source video.
- O código do cliente cria um soquete utilizando IPv4 na camada de rede e TCP na camada de transporte para se conectar ao servidor.
- O servidor utiliza multitreading para sustentar múltiplos clientes simultaneamente e emprega o lock para impedir que dois clientes comprem o mesmo ingresso ao mesmo tempo.
- A demonstração prática no VS Code mostra os comandos de listar e comprar eventos realizados por diferentes clientes conectados ao mesmo servidor.

Use this video with Pro
Reading, copying and transcript downloads are free. Create saved AI results for this video with a signed-in Pro account ($9/month).
Transcript
Search ignores accents. All transcript text stays visible.
Bom, vou começar a nossa apresentação falando sobre o código do cliente. A gente começa importando uma biblioteca Socket e a gente estabelece as configurações para o nosso host e pra nossa porta, que são esses respectivos endereços. Aqui a gente cria um método para executar o nosso cliente, que ele vai criar o soquete do cliente
utilizando o IPv4 na camada de rede e o TCP na camada de transporte. vai ser armazenado nessa variável cliente. E aqui a gente tem um bloco try que vai estabelecer o handshake da conexão do TCP com o nosso servidor aqui pela variável cliente, passando o ro e a porta como parâmetro.
posteriormente vai mostrar essas mensagens aqui. [limpando a garganta] Logo após, nós temos um loop while true, que vai receber uma das opções que o usuário vai fazer o input, vai passar ela pra que é maiúsculo, conforme os comandos aceitos que estão aqui.
E depois, se o usuário digitar a opção de sair, a gente vai dar um break no loop que vai sair da conexão. Se o usuário digitar qualquer outra coisa aleatória, a gente vai dar um continue nesse loop. E aqui a gente vai enviar a resposta do cliente passando o encode aqui dentro do padrão UTF8.
Aqui a gente vai esperar a resposta do servidor neste bloco. E nós temos aqui também um tratamento de exceção para trabalhar com uma uma conexão que não foi aceita. Então, se a conexão do cliente servidor não foi aceita, essa exceção vai capturar ela aqui e vai mostrar que não foi possível conectar o servidor. E a gente vai fechar o bloco try com esse final aqui,
que vai dar o close no cliente e fechar a nossa conexão. Bom, falando aqui agora do código do servidor, a gente definiu aqui uma função para inicializar o servidor, onde a gente vai determinar o protocolo da camada de rede PV4, protocolo da camada de transporte TCP, nosso servidor. Aqui a gente vai vincular o soquet ao
endereço de IP e portas configurados neste bloco de código aqui. Depois a gente vai colocar o servidor em modo de escuta para conseguir receber os nossos clientes. E aqui a gente tem o método Wi que vai deixar o código parado neste bloco aqui até nós recebermos um cliente dentro do nosso servidor. Uma vez que o servidor aceitar o cliente, a gente vai liberar o soquete e o endereço do cliente.
E logo abaixo a gente tem um bloco aqui que nós fizemos que vai permitir que o nosso servidor consiga sustentar múltiplos clientes simultaneamente através do multitreading. E aqui a gente colocou um bloco que vai permitir que a gente consiga ver no terminal quantas tradings, quantas tradings estão ativas e quantos clientes nós temos simultaneamente.
Bom, continuando a apresentação do código do servidor. Aqui a gente importa uma biblioteca socket e de trading. A gente define quais vão ser as configurações da rede e do servidor, utilizando host nesse endereço e a sua respectiva porta. Aqui a gente simulou um pequeno banco de dados em memória, utilizando os dicionários do Python, que servem para guardar quais quais
ingressos tem em respectivos eventos, como nesse caso aqui, nós temos esses dois. E aqui vem o detalhe da aplicação que é o lock, porque uma vez que nós trabalhamos com o multitread, a gente necessita do lock para que dois clientes não comprem o mesmo ingresso ao mesmo tempo.
Aqui nós temos a função de gerenciar o cliente, que foi utilizada na criação da trading aqui embaixo. E aqui a gente tem um bloco try. a gente coloca um loop wild true que vai receber os dados do cliente. Então, todo este bloco aqui fica responsável por receber os dados que o cliente enviou
e depois a gente vai fazer o processamento da lógica que o cliente no nos deu. Como por exemplo, se a ação for listar os eventos disponíveis, a gente vai dar uma resposta com os eventos disponíveis. Nesse caso aqui são esses dois.
Agora, se a sal for, por exemplo, comprar, a gente vai comprar o evento do cliente, só que respeitando a regra de negócio com o lock. Então, todo este bloco de comando aqui serve para você comprar o ingresso, eh, impedindo que duas threads diferentes comprem o mesmo ingresso.
Depois a gente vai enviar a resposta de volta pelo socket exclusivo do cliente. Então, a gente vai dar um sendrão UTF8.
E aqui a gente tem uma exceção genérica que é para estabelecer que houve uma falha na comunicação endereço do cliente. E a gente vai fechar o bloco try com o final que serve para fechar a conexão com o cliente.
Bom, agora eu vou mostrar como que o sistema tá funcionando. Aqui eu já me encarreguei de inicializar o servidor. inicializei também outros dois clientes. Então, como pode ver aqui tem um server, aqui tem um cliente e aqui tem outro cliente. E eu tô fazendo essa demonstração aqui no VS Code. Então aqui a gente consegue ver que uma conexão foi ativa com esse endereço de cliente aqui
conectado com sucesso, total de uma conexão. E aqui a gente vê outro endereço de cliente diferente que também foi conectado. E agora a gente tem um total de duas conexões trabalhando aí com uma com o multitreading, ou seja, múltiplos clientes conectados em o mesmo servidor. Então aqui eu vou em um dos clientes, eu vou realizar um comando de listar. E eu consigo ver que tem alguns eventos disponíveis. Então eu vou vir
aqui agora e eu vou decidir comprar um desses eventos. Então, eu fiz uma comando de comprar um dos eventos, tive sucesso na operação compra compra concluída.
E se eu vier aqui no servidor, eu consigo ver que essa requisição chegou no meu servidor nesse determinado endereço que enviou listar e depois comprar. E agora, se eu quiser vir no meu segundo cliente, eu consigo listar aqui e eu vou ver que tem um ingresso a menos neste evento. Então eu posso vir aqui comprar também um ingresso.
Comprei um ingresso deste evento do Rocken Rio. Eu vou comprar outro também. Pronto. Agora eu vou vir aqui no meu cliente um.
Vou mandar listar. Eu consigo ver também que a compra feita pelo cliente dois reflete aqui no cliente um. tem menos ingresso. E se eu vier aqui no código do servidor, eu vou conseguir ver aqui que essas duas primeiras requisições foram feitas deste determinado endereço, que é o meu cliente um, que enviou listar e comprar
o Rocken Rio. E aqui o meu cliente dois, que é deste endereço aqui, ele enviou primeiro listar e depois ele comprou estes outros dois eventos aqui. E aí o meu cliente um mandou listar novamente. Então essa nossa aplicação permite trabalhar com uma requisição em multitading com multiplies.