Отправлять различные типы сообщений через сокет

1

У меня есть клиент tcp, который отправляет разные типы сообщений, и я немного смущен, как это сделать. Сначала клиент отправляет строку (преобразованную в byte []), и это работает нормально, но затем я пытаюсь отправить сериализованный объект, и я не знаю, как это сделать, и как заставить сервер понять, что сообщение isn Строка. Объект, который я пытаюсь отправить, - это открытый ключ алгоритма RSA

 IFormatter formatter=new BinaryFormatter();
 formatter.Serialize(client.GetStream(),RSAParameterskeyinfo);

но я не знаю, как заставить сервер понять, что это сообщение не байт [].

  • 0
    Отредактируйте свой вопрос, чтобы показать, как вы сериализуете и отправляете объект, а также как вы пытаетесь прочитать его в
  • 0
    Проще было бы просто использовать WCF, который сделает всю работу за вас.
Показать ещё 4 комментария
Теги:
serialization
rsa
tcp

1 ответ

1

Чтобы ваш сервер понял, какой тип объекта он должен будет вычислить, вы должны совместно использовать dll между клиентом и сервером. Жесткая часть здесь - обрабатывать версию этой DLL (когда вы делаете изменения на объекте, который хотите разделить между клиентом и сервером, вам придется обновлять dll с каждой стороны)

Затем используйте BinaryFormatter для сериализации/десериализации вашего объекта. Сначала на стороне клиента сериализуйте свой объект с чем-то вроде:

MyMessage msg = new MyMessage("My custom message")
byte[] data;
using(var ms = new MemoryStream()) {
    BinaryFormatter formatter = new BinaryFormatter();
    formatter.Serialize(ms, msg);
    data = ms.ToArray();
    /*
     * Send to stream
     */
}

Затем на размер сервера вы должны десериализовать его так:

/*
 * Get the network stream
 */
BinaryFormatter formatter = new BinaryFormatter();
MyMessage msg = (MyMessage) formatter.Deserialize(myStream);

Поскольку они используют одну и ту же DLL, каждая сторона знает объект Message.

Дополнительные сведения о BinaryFormatter см. По адресу: http://msdn.microsoft.com/en-us/library/system.runtime.serialization.formatters.binary.binaryformatter(v=vs.110).aspx

Ещё вопросы

Сообщество Overcoder
Наверх
Меню