C # tcp сокеты, как определить, какой тип объекта передается? - PullRequest
0 голосов
/ 17 февраля 2012

Как определить, какой тип объекта отправляется через сокет, если код на стороне сервера выглядит следующим образом

        NetworkStream stream = socket.GetStream();
        BinaryFormatter formatter = new BinaryFormatter();
        formatter.Serialize(stream,objectToBeSent);

Ответы [ 2 ]

3 голосов
/ 17 февраля 2012

Единственный способ узнать, какой тип объекта передается, - это если в сообщении есть несколько метаданных, указывающих, что это такое. Шаблон сериализации должен быть известен обоим конечным точкам, чтобы каждая из них могла соответствующим образом сериализоваться и десериализоваться. Это (или должно быть) частью протокола, который вы определили для связи через сокет.

1 голос
/ 17 февраля 2012

На клиенте, я полагаю, вы собираетесь прочитать данные, отправленные сервером, и десериализовать их обратно:

object sentObject = formatter.Deserialize(stream);
Type objectType = sentObject.GetType();

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

Да, и имейте в виду, что класс BinaryFormatter использует не совместимый формат. Это означает, что если вы используете, например, разные версии .NET frmaeowrk на клиенте и сервере, это может не сработать. Если это так, вы должны использовать некоторый протокол взаимодействия форматов данных для обмена информацией между сервером и клиентом.

...