C #: Как должны обрабатываться данные буфера сокета TCP? Как байты или преобразованы в строку ASCII? - PullRequest
0 голосов
/ 27 мая 2009

C #: Как обрабатывать данные буфера сокета TCP? В байтах или в виде строки ascii?

Я использую методы, которые участвуют в разборе определенных данных из возвращенного буфера сокета tcp, какой метод будет лучше?

Должен ли я обрабатывать / анализировать мои данные в виде необработанных байтов? Или я должен обработать его после преобразования в строку ascii, поскольку типы данных строки имеют более качественные текстовые операции?

Ответы [ 3 ]

3 голосов
/ 27 мая 2009

В общем, как байты. Это в основном двоичные данные - это протокол выше TCP, который интерпретирует , что двоичные данные соответственно.

Теперь, что означает ваши данные? Вы контролируете протокол? Если это так, значит означает быть текстовыми данными? Преобразование двоичных данных для изображения (например) в ASCII, вероятно, будет иметь катастрофические последствия ... но если это действительно протокол только для ASCII, это, вероятно, правильный путь.

Если вы не знаете протокол, не выполняйте никаких преобразований: они могут потерять информацию, если вы не будете очень осторожны (например, используйте base64 вместо просто кодировки ASCII).

Если вы знаете протокол, это должно определять, как вы обрабатываете данные.

0 голосов
/ 27 мая 2009

Я думаю, это зависит от данных, содержащихся в буфере. Если это строка, удобно конвертировать буфер в строку.

Также обратите внимание, что перед отправкой строки вам необходимо добавить некоторые данные заголовка. Например, длина полезной нагрузки данных, контрольная сумма / четность и т. Д. Сеть является недетерминированной средой, и вы не можете точно сказать, кто что отправляет на указанный порт, вы можете получить трудно отслеживаемые сбои, если просто конвертируете полученный буфер непосредственно в строку.

0 голосов
/ 27 мая 2009

На самом деле данные буфера всегда "сырые" байты, поэтому, если вы хотите проанализировать содержимое, вам придется преобразовать байт [] в строку. Для примера:

string myString = Encoding.ASCII.GetString(myBufferData);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...