Теория: сокеты C #, отправка сериализованных объектов по сети - PullRequest
3 голосов
/ 04 августа 2011

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

Планируя, я обнаружил, что застрял в одном аспекте: отправка объектов по сети.

Мои цели для клиента / сервера:

  • Клиент / сервер, который я описываю, является «мировым» сервером и, таким образом, будет использовать TCP для связи.
  • Сервер и / или клиент должны иметь возможность отправлять любой сериализуемый объект друг другу, а получатель долженбыть в состоянии десериализовать его на своем конце.
  • Предпочтительный метод сериализации будет двоичным.

Однако я не знаю, как отправить сериализованные данные через сетевой сокет.Отправка строки - это просто ... Вы можете просто добавить строку-терминатор в конец и дождаться ее получения.Я не знаю, как вы можете сделать что-то эквивалентное с объектами;поэтому любые идеи / помощь / учебники будут оценены.

Спасибо.

1 Ответ

5 голосов
/ 04 августа 2011

Я предвзят (как автор), но protobuf-net будет отличным решением здесь:

  • двоичный, эффективный (как процессор, так и пропускная способность) формат
  • очень устойчив к версии
  • кроссплатформенный (protobuf)

В частности, SerializeWithLengthPrefix и DeserializeWithLengthPrefix (и т. Д.) Хорошо подходят для использования сокетов, так как это обрабатывает сегментацию сообщений для вас. Если вы хотите, вы также можете использовать вариант здесь (и неуниверсальный API) для отправки любого из диапазона сообщений и заставить его распознавать тип сообщения на основе заранее определенного числа, о котором вы думаете .

Таким образом, библиотека делает все возможное, чтобы доставить объект на провод. Единственным камнем преткновения является ваше определение «любого сериализуемого объекта» - если клиент / сервер согласен с типами задействованных сообщений, все будет хорошо - но «любой» немного сложнее.

Если у вас есть пример модели (она не обязательно должна быть вашей «реальной» моделью), не стесняйтесь добавлять ее, и я покажу, как ее можно использовать таким образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...