Domanda

Ho un server UDP che ho in corso il tentativo di inviare strutture mediante metodo send () .. No fortuna finora ...

Questo è quello che sto usando:

H, G sono strutture ...

lato mittente:

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

e sul lato del ricevitore:

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

Ma ottengo questo errore:

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

'UdpClientSample' sembra essere il titolo del programma client che invia i dati al server ... quindi mi chiedo se ci vuole più di serializzazione per poter così inviare una struttura attraverso la connessione UDP?

C'è una svolta là fuori che spiega quello che dice Iamamac?

È stato utile?

Soluzione

Non ho visto l'intero codice, ma credo che il server e il client è di due diversi file eseguibili, e la classe ClientAnswerStruct è definita due volte in entrambi i lati. Quando il ricevitore deserializzare i dati, si cerca di ricostruire un oggetto ClientAnswerStruct, ma non riesce a trovare la sua definizione (Si noti che è definita sul lato del mittente. Anche se sul lato del ricevitore c'è una classe denominata ClientAnswerStruct, ma non sono la stessa cosa) .

Il modo giusto per fare questo è definire la classe ClientAnswerStruct in una libreria di classi autonoma, e lasciare che il server e il codice del client includono esso ( 'Aggiungi riferimento' in C # terminologia).

Altri suggerimenti

Vorrei raccomandare chiarire la tua domanda un po '. . . Sto assumendo che stai cercando di utilizzare la seguente funzione in C o C ++?

  

ssize_t inviare (presa int, const void   * Del buffer, la lunghezza size_t, int flags);

Fateci sapere cosa problema specifico si stanno avendo, come ad esempio:. Messaggi di errore, il codice di esempio che non funziona, ecc

Se si sta parlando di C ++, che una struct è una classe se non in una struttura tutti i membri sono pubblici per impostazione predefinita. Tecnicamente (ma importante) non siete inviando una classe o una struttura, ma un'istanza di un oggetto o di tipo di dati primitivi.

-bn

Come lamamac già detto, questo non sembra essere un problema di codice o funzioni che usate. E 'solo che è stato aggiunto un riferimento alla vostra applicazione chiamata UdpClientSample , ma quando si avvia l'applicazione non riesce a trovare l'applicazione necessaria.

Il primo metodo più semplice per risolvere questo problema è quello di selezionare il riferimento nel progetto, fate clic destro, selezionare Proprietà e impostare la proprietà copia locale su true.

Se l'applicazione ora inizia a correre si dovrebbe fare un pensiero circa il ordine o utilizzando AssemblyResolve o utilizzando ILMerge

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top