.NET usando chr () para analisar o texto
-
25-09-2019 - |
Pergunta
Estou construindo um sistema de bate-papo cliente-servidor simples.
Os clientes enviam dados para o servidor e o servidor reassa os dados a todos os outros clientes. Estou usando as classes do TCPListener e do fluxo de rede para enviar os dados entre o cliente e o servidor.
Os campos que preciso enviar são, por exemplo: nome, texto, registro de data e hora, etc. Eu os separo usando o caractere ASCII 29.
Também estou usando o caractere ASCII 30 para marcar o final dos dados transmitidos.
Os dados são codificados com UTF8 ..
Será esta uma boa abordagem? Vou encontrar problemas? Existem métodos melhores?
ATUALIZAR:
Provavelmente, minha pergunta foi incompreendida, então explico melhor ... suponha que tenha uma lista de dados para enviar do cliente para o servidor e suponha enviar todos os dados em apenas um fluxo, como você envia esses dados?
- Usando uma marcação
- Usando um personagem como delimitador
- Usando um comprimento fixo para cada campos
Solução
Em vez de delimitar o texto, eu acho isso Muito de Mensagens individuais mais simples de prefixar de comprimento - então, em vez de escrever
message [TERMINATOR]
Você escreveria
[LENGTH] message
(Envie o comprimento em binário, e não o texto-um número de comprimento fixo, por exemplo, 4 bytes ou um número de comprimento de variável, se você estiver disposto a sacrificar a simplicidade por reduzir muito o tamanho dos dados transmitidos.)
Então é fácil ler exatamente a quantidade certa de dados do fluxo sem se preocupar em ultrapassar a próxima mensagem. A única desvantagem é que você precisa saber a duração da mensagem antes de começar a enviá -la, mas não acho que seja um problema para você neste caso.
A propósito, UTF-8 é um codificação, não um algoritmo de criptografia.
Outras dicas
Eu acho que outra opção poderia ser serializar/desserializar seus objetos e enviá -los/recebê -los usando .NET Remoting. Você também pode criptografar seus objetos ao enviar e descriptografar ao receber.
Dentro O projeto de código Encontrei um pequeno exemplo com código -fonte.