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
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top