Question

J'ai un serveur UDP que j'ai été d'essayer d'envoyer des structures en utilisant la méthode send () .. Pas de chance jusqu'à présent ...

est ce que je suis en utilisant:

H, G sont des structures ...

côté émetteur:

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

et sur le côté du récepteur:

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

Mais je reçois cette erreur:

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

« UdpClientSample » se trouve être le titre du programme client qui envoie les données au serveur ... Je me demande donc si cela prend plus de sérialisation pour pouvoir envoyer alors une structure via une connexion UDP?

Y at-il une percée là-bas qui explique ce que dit Iamamac?

Était-ce utile?

La solution

Je ne vois pas tout le code, mais je suppose que le serveur et le client est deux fichiers exécutables différents, et la classe ClientAnswerStruct est définie deux fois dans les deux côtés. Lorsque le récepteur désérialiser les données, il tente de reconstituer un objet ClientAnswerStruct mais ne peut pas trouver sa définition (avis qu'il est défini du côté de l'expéditeur. Bien sur il y a une classe nommée ClientAnswerStruct côté du récepteur, mais ils ne sont pas les mêmes) .

La bonne façon de le faire est de définir la classe ClientAnswerStruct dans une bibliothèque de classe autonome, et que le serveur et le code client de l'inclure ( « ajouter référence » dans la terminologie C #).

Autres conseils

Je recommande de clarifier votre question un peu. . . Je suppose que vous essayez d'utiliser la fonction suivante en C ou C ++?

  

ssize_t envoyer (socket int, const void   * Buffer, longueur size_t, int flags);

Faites-nous savoir ce problème spécifique que vous rencontrez, tels que:. Les messages d'erreur, exemple de code qui ne fonctionne pas, etc

Si vous parlez de C ++, qu'un struct est une classe, sauf dans un struct tous les membres sont publics par défaut. Techniquement (mais important) vous n'envoyez pas une classe ou un struct, mais une instance d'un objet ou d'un type de données primitif.

-bn

Comme lamamac déjà dit, cela ne semble pas être un problème de votre code ou les fonctions que vous utilisez. Il est juste que vous avez ajouté une référence à votre application appelée UdpClientSample mais lorsque vous démarrez votre application, il ne peut pas trouver l'application nécessaire.

La première méthode la plus simple pour résoudre ce problème est de sélectionner la référence dans votre projet, clic droit, sélectionnez Propriétés et définissez la propriété Copier local true.

Si l'application commence maintenant à courir, vous devriez faire une idée sur le pour ou utilisant AssemblyResolve ou en utilisant ILMerge

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top