Вопрос

Я строю простую систему чата клиент-сервер.

Клиенты отправляют данные на сервер, и сервер отправляет данные всем другим клиентам. Я использую классы TCPListener и сетевых потоков для отправки данных между клиентом и сервером.

Поля, которые мне нужно для отправки, например: имя, текст, временные метки и т. Д. Я отделяю их с помощью символа 29 ASCII.

Я также использую символ 30 ASCII, чтобы отметить конец потоковых данных.

Данные кодируются с UTF8.

Это хороший подход? Буду ли я столкнуться с проблемами? Есть ли лучшие методы?

ОБНОВИТЬ:

Вероятно, мой вопрос был неправильно понят, поэтому я объясняю его лучше .. Предположим, чтобы иметь список данных для отправки с клиента на сервер и предполагаю, чтобы отправить все данные только в один поток, как вы отправляете эти данные?

  • Используя разметку
  • Используя символ в качестве разделителя
  • Используя фиксированную длину для всех полей
Это было полезно?

Решение

А не разделив текст, я нахожу это много проще к длинному префиксу отдельных сообщений - так вместо письма

message [TERMINATOR]

Вы бы написали

[LENGTH] message

(Отправьте длину в двоичном, а не текст - либо номер фиксированной длины, например, 4 байта, либо номер переменной длины, если вы готовы пожертвовать простотой для уменьшения размера передаваемых данных.)

Затем легко прочитать именно правильное количество данных из потока, не беспокоясь о превышении превышения в следующее сообщение. Единственным недостатком является то, что вам нужно знать длину сообщения, прежде чем начать отправлять его, но я не думаю, что это должно быть проблемой для вас в этом случае.

Кстати, UTF-8 является кодирование, а не алгоритм шифрования.

Другие советы

Я думаю, что другой вариант может быть сериализовать / десериализовать свои объекты и отправлять / получать их, используя .NET Remoting. Отказ Вы также можете зашифровать свои объекты при отправке и расшифровании при получении.

В Код проекта Я нашел небольшой пример с исходным кодом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top