Как отправить класс через подключение к розетку UDP?

StackOverflow https://stackoverflow.com/questions/1968065

  •  21-09-2019
  •  | 
  •  

Вопрос

У меня есть сервер UDP, который я пытаюсь отправлять структуры с помощью метода Send () .. Не повезло до сих пор ...

Это то, что я использую:

H, g - структуры ...

Сторона отправителя:

IFormatter formatter = new BinaryFormatter();
MemoryStream stream = new MemoryStream();
formatter.Serialize(stream, H);
Byte[] buffer = stream.ToArray();
stream.Close();

и на стороне приемника:

IFormatter formatter = new BinaryFormatter();
Stream s = new MemoryStream(buffer.Data);
ClientAnswerStruct G = (ClientAnswerStruct)formatter.Deserialize(s);
s.Close();
MessageBox.Show(G.name);

Но я получаю эту ошибку:

 Unable to find assembly 'UdpClientSample, Version=1.0.0.0, Culture=neutral,    PublicKeyToken=null'.

«UDPClientsample» - это заголовок клиентской программы, которая отправляет данные на сервер ... так что мне интересно, требуется ли для сериализации больше, чем сериализация, поэтому отправьте структуру через UDP -соединение?

Есть ли прорыв, который объясняет, что говорит Яамак?

Это было полезно?

Решение

Я не видел весь код, но я думаю, что сервер и клиент - это два разных исполняемых файла, и ClientAnswerStruct класс определен дважды в обеих сторонах. Когда приемник понижает данные, он пытается реконструировать ClientAnswerStruct объект, но не может найти его определение (обратите внимание, что оно определено на стороне отправителя. Хотя на стороне приемника есть класс с именем ClientAnswerStruct, но они не те же).

Правильный способ сделать это определить ClientAnswerStruct Класс в автономной библиотеке классов, и пусть сервер и код клиента включают его («добавить ссылку» в Terminology C#).

Другие советы

Я бы порекомендовал немного уточнить ваш вопрос. Анкет Анкет Я предполагаю, что вы пытаетесь использовать следующую функцию в C или C ++?

ssize_t send (int socket, const void *buffer, size_t length, int flags);

Дайте нам знать, какую конкретную проблему у вас возникают, например: сообщения об ошибках, пример кода, который не работает и т. Д.

Если вы говорите о C ++, то struct - это класс, кроме как в структуре, все участники являются публичными по умолчанию. Технически (но важно) вы отправляете не класс или структуру, а экземпляр объекта или примитивного типа данных.

-BN

Как уже сказал Lamamac, это, кажется, не является проблемой вашего кода или функций, которые вы используете. Просто вы добавили ссылку на свое приложение под названием Udpclientsample Но когда вы начинаете свое приложение, он не может найти необходимое приложение.

Первый самый простой метод решения этой проблемы - выбрать ссылку в своем проекте, щелкните правой кнопкой мыши, выберите свойства и установите свойство Копировать локальный к истинному.

Если приложение теперь начинает работать, вы должны подумать о загрузка заказов или же Использование Assemblyresolve или же Используя Ilmerge

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top