·
Sistemas de Informação ·
Rede de Computadores
Send your question to AI and receive an answer instantly
Recommended for you
Preview text
Controle de Envio de Arquivos Execução Individual Data de entrega 17 de maio de 2023 até 23h59min INTRODUÇÃO Dois amigos querem transferir arquivos entre seus computadores em um sítio sem acesso a internet logo decidem realizar a transferência na rede local utilizando sockets Para simplificar o funcionamento da transferência um computador age como o servidor e somente e o outro age como cliente Estes arquivos devem ser Plain Text ou seja texto puro Nesta primeira versão não será possível enviar bin sh entre outros tipos além de texto OBJETIVO O objetivo deste trabalho prático é implementar um sistema de transferência de arquivo simples entre um servidor e um cliente utilizando sockets em C O servidor deve aceitar a conexão de um único cliente permitindo que ele envie um arquivo para o servidor O servidor deve receber o arquivo e armazenálo em seu sistema de arquivos O cliente deve ser capaz de se conectar ao servidor enviar um arquivo e receber uma confirmação do servidor de que o arquivo foi recebido com sucesso O servidor deve ser capaz de executar as seguintes funções Aceitar a conexão de um único cliente Receber o arquivo do cliente e armazenálo no sistema de arquivos Confirmar ao cliente que o arquivo foi recebido com sucesso Receber pedido de encerramento de conexão O cliente deve ser capaz de executar as seguintes funções Conectarse ao servidor Selecionar um arquivo para enviar ao servidor Enviar o arquivo ao servidor Receber uma confirmação do servidor de que o arquivo foi recebido com sucesso Encerrar a conexão com o servidor PROTOCOLO O protocolo de comunicação deve ser simples com mensagens em texto puro Cada mensagem deve ter um cabeçalho que indica o nome do arquivo utilizado no destino seguido pelo conteúdo da mensagem O conteúdo da mensagem deve conter os dados do arquivo Caso o cliente queira encerrar a conexão envie a mensagem exit para o servidor e a conexão deve ser encerrada Os tipos válidos de arquivos podem ser vistos na Tabela I Tipos Válidos de Arquivos txt c cpp py tex java Tabela I O cliente e o servidor trocam mensagens curtas de até 500 bytes utilizando o protocolo TCP As mensagens carregam textos codificados segundo a tabela ASCII Apenas letras números e espaços podem ser transmitidos Caracteres acentuados e especiais não devem ser transmitidos As mensagens de comando são inseridas somente no cliente e a resposta vem do servidor A seguir estão descritas as ações que devem ser performadas bem como a formatação de cada tipo de mensagem e a resposta desejada Selecionar arquivo a ser enviado o cliente seleciona o arquivo local a ser enviado ao servidor Isso deve ser feito através do comando select file nomearquivo onde o campo nomearquivo descreve o nome do arquivo com sua extensão Não deve ser possível selecionar um arquivo que não tenha uma das extensões da Tabela I Caso o arquivo seja válido o próprio cliente deve retornar uma mensagem nomearquivo selected Caso isso ocorra o próprio cliente deve retornar uma mensagem nomearquivo not valid Caso o arquivo não exista na pasta o próprio cliente deve retornar uma mensagem nomearquivo do not exist Enviar arquivo selecionado Após selecionar um arquivo válido enviar o mesmo Essa ação deve ser feita através do comando send file Após enviado o servidor deve retornar a resposta file nomearquivo received Caso o envio falhe o servidor deve retornar a mensagem error receiving file nomearquivo Caso o cliente não tenha selecionado nenhum arquivo o próprio cliente deve retornar a mensagem no file selected Caso o arquivo enviado já exista no servidor o mesmo deve ser sobrescrito e o servidor deve retornar a resposta file nomearquivo overwritten terminar sessão O cliente ao querer finalizar a sessão deve requisitar termino Para isso deve usar o comando exit O servidor deve responder connection closed Os exemplos a seguir são da tela do cliente já após estar conectado ao servidor Exemplo 1 Terminal Cliente Resposta Cliente Resposta Servidor select file arquivoooootxt arquivoooootxt does not exist select file arquivotxt arquivotxt selected send file file arquivotxt received send file file arquivotxt overwritten exit connection closed Exemplo 2 Terminal Cliente Resposta Cliente Resposta Servidor send file no file selected select file halflifeexe halflifeexe not valid send file no file selected select file arquivotxt arquivotxt selected send file file arquivotxt received exit connection closed Detalhes de Implementação do Protocolo Como dentro do arquivo de texto podem existir caracteres de quebra de linha as mensagens serão terminadas com uma sequência definida end O caractere nulo 0 para terminação de strings em C não deve ser enviado na rede Atentese que até as mensagens que são digitadas no terminal do cliente terminam em um mas ela não é exatamente o que é enviado via socket Dica faça o tratamento de strings com a biblioteca stringh Nesse caso o servidor deve enviar todas as respostas em uma mesma linha conforme mostrado nos exemplos acima O servidor deve desconectar o cliente caso receba uma mensagem com um comando desconhecido exemplo selec em vez de select mas não precisa retornar mensagem inválida Para funcionamento do sistema de correção semiautomática descrito abaixo seu servidor deve fechar todas as conexões e terminar sua execução ao receber a mensagem exit a qualquer momento DICAS As dicas a seguir correspondem à manipulação de arquivos em C Existem vários tutoriais na internet e nas aulas de C de alguns professores do departamento Além disso se lembre de Use da biblioteca stringh para verificar as extensões dos arquivos Pode fazer sem ela se quiser mas terá mais trabalho Use as funções de File para verificar se o arquivo já existe tanto na hora de escrever no servidor quanto na hora de selecionar o arquivo no cliente IMPLEMENTAÇÃO O aluno deve implementar tanto uma versão do servidor quanto uma versão do cliente Ambos devem utilizar o protocolo TCP criado com socketAFINET SOCKSTREAM 0 ou com socketAFINET6 SOCKSTREAM 0 Deve ser possível utilizar tanto o IPv4 quanto o IPv6 O cliente deve receber mensagens do teclado e imprimir as mensagens recebidas na tela O servidor deve imprimir na saída padrão todas as mensagens recebidas do cliente Não é necessário que o servidor aceite mais de um cliente simultaneamente Seu servidor deve receber estritamente nessa ordem o tipo de endereço que será utilizado v4 para IPv4 ou v6 para IPv6 e um número de porta na linha de comando especificando em qual porta ele vai receber conexões Sugestão utilize a porta 51511 para efeitos de padronização do trabalho Seu cliente deve receber estritamente nessa ordem o endereço IP e a porta do servidor para estabelecimento da conexão A seguir um exemplo de execução dos programas em dois terminais distintos IPv4 no terminal 1 server v4 51511 no terminal 2 client 127001 51511 IPv6 no terminal 1 server v6 51511 no terminal 2 client 1 51511 O servidor pode dar bind em todos os endereços IP associados às suas interfaces usando a constante INADDRANY para IPv4 ou in6addrany para IPv6 Limites Cada mensagem possui no máximo 500 bytes Materiais para Consulta Capítulo 2 e 3 do livro sobre programação com sockets disponibilizado no Moodle Playlist de programação com sockets AVALIAÇÃO O trabalho deve ser realizado individualmente e deve ser implementado com a linguagem de programação C utilizando somente a biblioteca padrão interface POSIX de sockets de redes Deve ser possível executar seu programa no sistema operacional Linux e não deve utilizar bibliotecas Windows como o winsock Seu programa deve interoperar com qualquer outro programa implementando o mesmo protocolo você pode testar com as implementações dos seus colegas Procure escrever seu código de maneira clara com comentários pontuais e bem indentados Isto facilita a correção dos monitores e tem impacto positivo na avaliação Correção Semiautomática Seu servidor será corrigido de forma semiautomática por uma bateria de testes Cada teste verifica uma funcionalidade específica do servidor O seu servidor será testado por um cliente implementado pelo professor com funcionalidades adicionais para realização dos testes Os testes avaliam a aderência do seu servidor ao protocolo de comunicação inteiramente através dos dados trocados através da rede a saída do seu servidor na tela eg para depuração não impacta os resultados dos testes Para a correção os seguintes testes serão realizados com IPv4 e IPv6 Selecionar arquivo 15 Enviar arquivo 15 Tratamentos de seleçãoenvio 30 Tratamentos de recebimento 30 Cliente envia exit para o servidor e fecha a execução 10 Obs1 Caso os testes funcionem em apenas um tipo de endereço IPv4 ou IPv6 a pontuação do respectivo teste será reduzida pela metade Obs2 Considere para cada cenário acima todas as possibilidades possíveis tentar enviar arquivo que não existe sobrescrever arquivo etc Obs3 Não é necessário fazer tratamento para overflow de mensagens Entrega Cada aluno deve entregar documentação em PDF de até 4 páginas duas folhas sem capa utilizando fonte tamanho 10 e figuras de tamanho adequado ao tamanho da fonte A documentação deve discutir desafios dificuldades e imprevistos do projeto bem como as soluções adotadas para os problemas A documentação corresponde a 20 dos pontos do trabalho mas só será considerada para as funcionalidades implementadas corretamente Será utilizado um sistema para detecção de código repetido portanto não é admitido cola de trabalhos Será adotada média harmônica entre as notas da documentação e da execução o que implica que a nota final será 0 se uma das partes não for apresentada Cada aluno deve entregar além da documentação o código fonte em C e um Makefile para compilação do programa Instruções para submissão e compatibilidade com o sistema de correção semiautomática O Makefile deve compilar o cliente em um binário chamado client e o servidor em um binário chamado server Seu programa deve ser compilado ao se executar apenas o comando make ou seja sem a necessidade de parâmetros adicionais A entrega deve ser feita no formato ZIP com o nome seguindo o seguinte padrão TP1MATRICULAzip Os nomes dos arquivos devem ser padronizado serverc clientc commonc commonh se houver Desconto de Nota por Atraso Os trabalhos poderão ser entregues até a meianoite do dia especificado para a entrega O horário de entrega deve respeitar o relógio do sistema Moodle ou seja a partir de 0001 do dia seguinte à entrega no relógio do Moodle os trabalhos já estarão sujeitos a penalidades A fórmula para desconto por atraso na entrega do trabalho prático é 𝑑𝑒𝑠𝑐𝑜𝑛𝑡𝑜 2 𝑑 1 onde d é o atraso em dias úteis Note que após 3 dias o trabalho não pode ser mais entregue Esse projeto possui o objetivo de simular um serviço de troca de arquivos em um ambiente sem internet utilizando sockets Para isso seguiuse a trilha de vídeos disponibilizada para criar a base do projeto Portanto podese verificar que a maior parte da estrutura e muitas funções foram reproduzidas do material fornecido Após implementar um serviço de troca de mensagens via socket foi fácil adaptálo para um sistema de troca de arquivos Para isso foi necessário lidar com os diversos comandos do cliente Para isso foi utilizado um laço de repetição de modo que pudéssemos capturar diversos comandos sequenciais do cliente mantendo um estado dos processos que haviam sido realizados no laço anterior Por exemplo era preciso manter salvo o conteúdo do arquivo de uma operação de select file no momento da operação de send file para saber se havia arquivo carregado com sucesso ou não A próxima etapa foi lidar com o carregamento do arquivo Utilizouse as funções de leitura de arquivo e a biblioteca stringh para transformar o conteúdo do arquivo em uma única string e enviála como mensagem através do socket Esse conteúdo era enviado junto com um comando prédeterminado Assim quando era apenas um exit apenas essa mensagem era enviada Mas quando era um arquivo era enviado no formato send file filename filecontent Assim o servidor ao verificar que não se tratava de um comando exit deveria separar esse comando de 4 argumentos e tomar o filename e o file content para criar ou atualizar o arquivo É importante destacar que criamos ao inicializar o servidor uma pasta serverFiles para que pudéssemos verificar o conteúdo de um arquivo do cliente sendo transferido para essa pasta Assim ao rodar o programa todos os arquivos salvos ficarão alocados nessa pasta Essa importante operação de segregação dos argumentos dos comandos foi resumida em uma função splitString do commonc e commonh Essa operação foi utilizada tanto pelo servidor para receber e processar os comandos do cliente quanto pela aplicação do cliente para processar as entradas da linha de comando Após todo esse processo foi preciso lidar com as responsabilidades do servidor salvar o arquivo transferido corretamente verificar se a operação é uma criação ou atualização gerar a correta resposta para o cliente Utilizamos operações de escrita em arquivo abrindoos com o modo w para lidar com criação e atualização O maior desafio enfrentado foi lidar com abertura e fechamento de sockets Houve um momento em que foi verificado que o servidor não enviava a resposta ao cliente antes de encerrar a conexão do socket o que me obrigou a encerrar a conexão ao enviar uma mensagem e abrir uma nova a cada iteração Do lado do cliente foi feito a mesma coisa um novo socket a cada mensagem que se desejava transmitir Identificar e solucionar esse problema foi uma das etapas que demandou maior custo do projeto Alguns logs do sistema devem ser verificados antes da correção automática Tanto servidor quanto cliente exibem características da conexão no momento que ela ocorre Portanto dependendo de como o teste automatizado opera ele pode identificar esses outputs como outputs incorretos ou inesperados
Send your question to AI and receive an answer instantly
Recommended for you
Preview text
Controle de Envio de Arquivos Execução Individual Data de entrega 17 de maio de 2023 até 23h59min INTRODUÇÃO Dois amigos querem transferir arquivos entre seus computadores em um sítio sem acesso a internet logo decidem realizar a transferência na rede local utilizando sockets Para simplificar o funcionamento da transferência um computador age como o servidor e somente e o outro age como cliente Estes arquivos devem ser Plain Text ou seja texto puro Nesta primeira versão não será possível enviar bin sh entre outros tipos além de texto OBJETIVO O objetivo deste trabalho prático é implementar um sistema de transferência de arquivo simples entre um servidor e um cliente utilizando sockets em C O servidor deve aceitar a conexão de um único cliente permitindo que ele envie um arquivo para o servidor O servidor deve receber o arquivo e armazenálo em seu sistema de arquivos O cliente deve ser capaz de se conectar ao servidor enviar um arquivo e receber uma confirmação do servidor de que o arquivo foi recebido com sucesso O servidor deve ser capaz de executar as seguintes funções Aceitar a conexão de um único cliente Receber o arquivo do cliente e armazenálo no sistema de arquivos Confirmar ao cliente que o arquivo foi recebido com sucesso Receber pedido de encerramento de conexão O cliente deve ser capaz de executar as seguintes funções Conectarse ao servidor Selecionar um arquivo para enviar ao servidor Enviar o arquivo ao servidor Receber uma confirmação do servidor de que o arquivo foi recebido com sucesso Encerrar a conexão com o servidor PROTOCOLO O protocolo de comunicação deve ser simples com mensagens em texto puro Cada mensagem deve ter um cabeçalho que indica o nome do arquivo utilizado no destino seguido pelo conteúdo da mensagem O conteúdo da mensagem deve conter os dados do arquivo Caso o cliente queira encerrar a conexão envie a mensagem exit para o servidor e a conexão deve ser encerrada Os tipos válidos de arquivos podem ser vistos na Tabela I Tipos Válidos de Arquivos txt c cpp py tex java Tabela I O cliente e o servidor trocam mensagens curtas de até 500 bytes utilizando o protocolo TCP As mensagens carregam textos codificados segundo a tabela ASCII Apenas letras números e espaços podem ser transmitidos Caracteres acentuados e especiais não devem ser transmitidos As mensagens de comando são inseridas somente no cliente e a resposta vem do servidor A seguir estão descritas as ações que devem ser performadas bem como a formatação de cada tipo de mensagem e a resposta desejada Selecionar arquivo a ser enviado o cliente seleciona o arquivo local a ser enviado ao servidor Isso deve ser feito através do comando select file nomearquivo onde o campo nomearquivo descreve o nome do arquivo com sua extensão Não deve ser possível selecionar um arquivo que não tenha uma das extensões da Tabela I Caso o arquivo seja válido o próprio cliente deve retornar uma mensagem nomearquivo selected Caso isso ocorra o próprio cliente deve retornar uma mensagem nomearquivo not valid Caso o arquivo não exista na pasta o próprio cliente deve retornar uma mensagem nomearquivo do not exist Enviar arquivo selecionado Após selecionar um arquivo válido enviar o mesmo Essa ação deve ser feita através do comando send file Após enviado o servidor deve retornar a resposta file nomearquivo received Caso o envio falhe o servidor deve retornar a mensagem error receiving file nomearquivo Caso o cliente não tenha selecionado nenhum arquivo o próprio cliente deve retornar a mensagem no file selected Caso o arquivo enviado já exista no servidor o mesmo deve ser sobrescrito e o servidor deve retornar a resposta file nomearquivo overwritten terminar sessão O cliente ao querer finalizar a sessão deve requisitar termino Para isso deve usar o comando exit O servidor deve responder connection closed Os exemplos a seguir são da tela do cliente já após estar conectado ao servidor Exemplo 1 Terminal Cliente Resposta Cliente Resposta Servidor select file arquivoooootxt arquivoooootxt does not exist select file arquivotxt arquivotxt selected send file file arquivotxt received send file file arquivotxt overwritten exit connection closed Exemplo 2 Terminal Cliente Resposta Cliente Resposta Servidor send file no file selected select file halflifeexe halflifeexe not valid send file no file selected select file arquivotxt arquivotxt selected send file file arquivotxt received exit connection closed Detalhes de Implementação do Protocolo Como dentro do arquivo de texto podem existir caracteres de quebra de linha as mensagens serão terminadas com uma sequência definida end O caractere nulo 0 para terminação de strings em C não deve ser enviado na rede Atentese que até as mensagens que são digitadas no terminal do cliente terminam em um mas ela não é exatamente o que é enviado via socket Dica faça o tratamento de strings com a biblioteca stringh Nesse caso o servidor deve enviar todas as respostas em uma mesma linha conforme mostrado nos exemplos acima O servidor deve desconectar o cliente caso receba uma mensagem com um comando desconhecido exemplo selec em vez de select mas não precisa retornar mensagem inválida Para funcionamento do sistema de correção semiautomática descrito abaixo seu servidor deve fechar todas as conexões e terminar sua execução ao receber a mensagem exit a qualquer momento DICAS As dicas a seguir correspondem à manipulação de arquivos em C Existem vários tutoriais na internet e nas aulas de C de alguns professores do departamento Além disso se lembre de Use da biblioteca stringh para verificar as extensões dos arquivos Pode fazer sem ela se quiser mas terá mais trabalho Use as funções de File para verificar se o arquivo já existe tanto na hora de escrever no servidor quanto na hora de selecionar o arquivo no cliente IMPLEMENTAÇÃO O aluno deve implementar tanto uma versão do servidor quanto uma versão do cliente Ambos devem utilizar o protocolo TCP criado com socketAFINET SOCKSTREAM 0 ou com socketAFINET6 SOCKSTREAM 0 Deve ser possível utilizar tanto o IPv4 quanto o IPv6 O cliente deve receber mensagens do teclado e imprimir as mensagens recebidas na tela O servidor deve imprimir na saída padrão todas as mensagens recebidas do cliente Não é necessário que o servidor aceite mais de um cliente simultaneamente Seu servidor deve receber estritamente nessa ordem o tipo de endereço que será utilizado v4 para IPv4 ou v6 para IPv6 e um número de porta na linha de comando especificando em qual porta ele vai receber conexões Sugestão utilize a porta 51511 para efeitos de padronização do trabalho Seu cliente deve receber estritamente nessa ordem o endereço IP e a porta do servidor para estabelecimento da conexão A seguir um exemplo de execução dos programas em dois terminais distintos IPv4 no terminal 1 server v4 51511 no terminal 2 client 127001 51511 IPv6 no terminal 1 server v6 51511 no terminal 2 client 1 51511 O servidor pode dar bind em todos os endereços IP associados às suas interfaces usando a constante INADDRANY para IPv4 ou in6addrany para IPv6 Limites Cada mensagem possui no máximo 500 bytes Materiais para Consulta Capítulo 2 e 3 do livro sobre programação com sockets disponibilizado no Moodle Playlist de programação com sockets AVALIAÇÃO O trabalho deve ser realizado individualmente e deve ser implementado com a linguagem de programação C utilizando somente a biblioteca padrão interface POSIX de sockets de redes Deve ser possível executar seu programa no sistema operacional Linux e não deve utilizar bibliotecas Windows como o winsock Seu programa deve interoperar com qualquer outro programa implementando o mesmo protocolo você pode testar com as implementações dos seus colegas Procure escrever seu código de maneira clara com comentários pontuais e bem indentados Isto facilita a correção dos monitores e tem impacto positivo na avaliação Correção Semiautomática Seu servidor será corrigido de forma semiautomática por uma bateria de testes Cada teste verifica uma funcionalidade específica do servidor O seu servidor será testado por um cliente implementado pelo professor com funcionalidades adicionais para realização dos testes Os testes avaliam a aderência do seu servidor ao protocolo de comunicação inteiramente através dos dados trocados através da rede a saída do seu servidor na tela eg para depuração não impacta os resultados dos testes Para a correção os seguintes testes serão realizados com IPv4 e IPv6 Selecionar arquivo 15 Enviar arquivo 15 Tratamentos de seleçãoenvio 30 Tratamentos de recebimento 30 Cliente envia exit para o servidor e fecha a execução 10 Obs1 Caso os testes funcionem em apenas um tipo de endereço IPv4 ou IPv6 a pontuação do respectivo teste será reduzida pela metade Obs2 Considere para cada cenário acima todas as possibilidades possíveis tentar enviar arquivo que não existe sobrescrever arquivo etc Obs3 Não é necessário fazer tratamento para overflow de mensagens Entrega Cada aluno deve entregar documentação em PDF de até 4 páginas duas folhas sem capa utilizando fonte tamanho 10 e figuras de tamanho adequado ao tamanho da fonte A documentação deve discutir desafios dificuldades e imprevistos do projeto bem como as soluções adotadas para os problemas A documentação corresponde a 20 dos pontos do trabalho mas só será considerada para as funcionalidades implementadas corretamente Será utilizado um sistema para detecção de código repetido portanto não é admitido cola de trabalhos Será adotada média harmônica entre as notas da documentação e da execução o que implica que a nota final será 0 se uma das partes não for apresentada Cada aluno deve entregar além da documentação o código fonte em C e um Makefile para compilação do programa Instruções para submissão e compatibilidade com o sistema de correção semiautomática O Makefile deve compilar o cliente em um binário chamado client e o servidor em um binário chamado server Seu programa deve ser compilado ao se executar apenas o comando make ou seja sem a necessidade de parâmetros adicionais A entrega deve ser feita no formato ZIP com o nome seguindo o seguinte padrão TP1MATRICULAzip Os nomes dos arquivos devem ser padronizado serverc clientc commonc commonh se houver Desconto de Nota por Atraso Os trabalhos poderão ser entregues até a meianoite do dia especificado para a entrega O horário de entrega deve respeitar o relógio do sistema Moodle ou seja a partir de 0001 do dia seguinte à entrega no relógio do Moodle os trabalhos já estarão sujeitos a penalidades A fórmula para desconto por atraso na entrega do trabalho prático é 𝑑𝑒𝑠𝑐𝑜𝑛𝑡𝑜 2 𝑑 1 onde d é o atraso em dias úteis Note que após 3 dias o trabalho não pode ser mais entregue Esse projeto possui o objetivo de simular um serviço de troca de arquivos em um ambiente sem internet utilizando sockets Para isso seguiuse a trilha de vídeos disponibilizada para criar a base do projeto Portanto podese verificar que a maior parte da estrutura e muitas funções foram reproduzidas do material fornecido Após implementar um serviço de troca de mensagens via socket foi fácil adaptálo para um sistema de troca de arquivos Para isso foi necessário lidar com os diversos comandos do cliente Para isso foi utilizado um laço de repetição de modo que pudéssemos capturar diversos comandos sequenciais do cliente mantendo um estado dos processos que haviam sido realizados no laço anterior Por exemplo era preciso manter salvo o conteúdo do arquivo de uma operação de select file no momento da operação de send file para saber se havia arquivo carregado com sucesso ou não A próxima etapa foi lidar com o carregamento do arquivo Utilizouse as funções de leitura de arquivo e a biblioteca stringh para transformar o conteúdo do arquivo em uma única string e enviála como mensagem através do socket Esse conteúdo era enviado junto com um comando prédeterminado Assim quando era apenas um exit apenas essa mensagem era enviada Mas quando era um arquivo era enviado no formato send file filename filecontent Assim o servidor ao verificar que não se tratava de um comando exit deveria separar esse comando de 4 argumentos e tomar o filename e o file content para criar ou atualizar o arquivo É importante destacar que criamos ao inicializar o servidor uma pasta serverFiles para que pudéssemos verificar o conteúdo de um arquivo do cliente sendo transferido para essa pasta Assim ao rodar o programa todos os arquivos salvos ficarão alocados nessa pasta Essa importante operação de segregação dos argumentos dos comandos foi resumida em uma função splitString do commonc e commonh Essa operação foi utilizada tanto pelo servidor para receber e processar os comandos do cliente quanto pela aplicação do cliente para processar as entradas da linha de comando Após todo esse processo foi preciso lidar com as responsabilidades do servidor salvar o arquivo transferido corretamente verificar se a operação é uma criação ou atualização gerar a correta resposta para o cliente Utilizamos operações de escrita em arquivo abrindoos com o modo w para lidar com criação e atualização O maior desafio enfrentado foi lidar com abertura e fechamento de sockets Houve um momento em que foi verificado que o servidor não enviava a resposta ao cliente antes de encerrar a conexão do socket o que me obrigou a encerrar a conexão ao enviar uma mensagem e abrir uma nova a cada iteração Do lado do cliente foi feito a mesma coisa um novo socket a cada mensagem que se desejava transmitir Identificar e solucionar esse problema foi uma das etapas que demandou maior custo do projeto Alguns logs do sistema devem ser verificados antes da correção automática Tanto servidor quanto cliente exibem características da conexão no momento que ela ocorre Portanto dependendo de como o teste automatizado opera ele pode identificar esses outputs como outputs incorretos ou inesperados