.NET с помощью CHR () для анализа текста
-
25-09-2019 - |
Вопрос
Я строю простую систему чата клиент-сервер.
Клиенты отправляют данные на сервер, и сервер отправляет данные всем другим клиентам. Я использую классы TCPListener и сетевых потоков для отправки данных между клиентом и сервером.
Поля, которые мне нужно для отправки, например: имя, текст, временные метки и т. Д. Я отделяю их с помощью символа 29 ASCII.
Я также использую символ 30 ASCII, чтобы отметить конец потоковых данных.
Данные кодируются с UTF8.
Это хороший подход? Буду ли я столкнуться с проблемами? Есть ли лучшие методы?
ОБНОВИТЬ:
Вероятно, мой вопрос был неправильно понят, поэтому я объясняю его лучше .. Предположим, чтобы иметь список данных для отправки с клиента на сервер и предполагаю, чтобы отправить все данные только в один поток, как вы отправляете эти данные?
- Используя разметку
- Используя символ в качестве разделителя
- Используя фиксированную длину для всех полей
Решение
А не разделив текст, я нахожу это много проще к длинному префиксу отдельных сообщений - так вместо письма
message [TERMINATOR]
Вы бы написали
[LENGTH] message
(Отправьте длину в двоичном, а не текст - либо номер фиксированной длины, например, 4 байта, либо номер переменной длины, если вы готовы пожертвовать простотой для уменьшения размера передаваемых данных.)
Затем легко прочитать именно правильное количество данных из потока, не беспокоясь о превышении превышения в следующее сообщение. Единственным недостатком является то, что вам нужно знать длину сообщения, прежде чем начать отправлять его, но я не думаю, что это должно быть проблемой для вас в этом случае.
Кстати, UTF-8 является кодирование, а не алгоритм шифрования.
Другие советы
Я думаю, что другой вариант может быть сериализовать / десериализовать свои объекты и отправлять / получать их, используя .NET Remoting. Отказ Вы также можете зашифровать свои объекты при отправке и расшифровании при получении.
В Код проекта Я нашел небольшой пример с исходным кодом.