С# передача объектов TCPListener

Я новичок в сетевом программировании на C#. Я нашел класс TCPListener очень полезным для отправки текста между компьютерами, но мне было интересно, можно ли напрямую отправлять объекты (при условии, что и клиент, и сервер имеют определение класса) между машинами без необходимости сначала преобразовывать их в строку, а затем делать объект с этими данными.

Спасибо,

PM


person PNM    schedule 12.10.2010    source источник


Ответы (3)


Одним из решений вашей проблемы является использование WCF и пометка ваших объектов как Serializable с привязкой TCP. Но это совсем другой подход, чем "низкоуровневое" решение на основе сокетов, которое у вас уже есть. Тем не менее, я бы попробовал WCF.

person Ron Klein    schedule 12.10.2010

Вы не можете отправлять «объекты» напрямую через сеть. Вы должны либо преобразовать их в разборчивую двоичную или текстовую форму. Для последнего часто лучше всего подходит xml. Вы можете использовать BinaryFormatter или XmlSerializer для этого.

Если вы действительно хотите отправлять объекты .NET, потому что вы обслуживаете только клиентов .net, tcp может быть на низком уровне для ваших нужд. В этом случае взгляните на .net remoting, который позволяет напрямую обмениваться объектами между сервером и клиентом.

person codymanix    schedule 12.10.2010
comment
Вместо .NET Remoting посмотрите на WCF. - person Dave Markle; 12.10.2010
comment
Есть ли проблема с удаленным взаимодействием .net? - person codymanix; 12.10.2010

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

  BinaryFormatter bFormatter = new BinaryFormatter();
  bFormatter.Serialize(stream, objectToSerialize);
  stream.Close();

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

person Guy Starbuck    schedule 12.10.2010