Pergunta

Eu tenho um servidor UDP que estou tentando enviar estruturas usando o método send().Sem sorte até agora...

Isto é o que estou usando:

H,G são estruturas...

lado do remetente:

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

e no lado do receptor:

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

Mas eu recebo este erro:

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

'UdpClientSample' é o título do programa cliente que está enviando os dados para o servidor ...Então, estou me perguntando se é preciso mais do que serialização para poder enviar uma estrutura através de conexão UDP?

Existe alguma descoberta que explique o que Iamamac diz?

Foi útil?

Solução

Não vi o código inteiro, mas acho que o servidor e o cliente são dois arquivos executáveis ​​diferentes, e o ClientAnswerStruct classe é definida duas vezes em ambos os lados.Quando o receptor desserializa os dados, ele tenta reconstruir um ClientAnswerStruct objeto, mas não consegue encontrar sua definição (observe que ele é definido do lado do remetente.Embora do lado do receptor exista uma classe chamada ClientAnswerStruct, Mas elas não são as mesmas).

A maneira correta de fazer isso é definir o ClientAnswerStruct class em uma biblioteca de classes independente e permitir que o código do servidor e do cliente a inclua ('adicionar referência' na terminologia C#).

Outras dicas

Eu recomendaria esclarecer um pouco sua pergunta. . . Suponho que você esteja tentando usar a seguinte função em C ou C ++?

ssize_t envia (soquete int, const void *buffer, tamanho_t comprimento, int sinalizadores);

Deixe -nos saber qual problema específico você está tendo, como: mensagens de erro, código de exemplo que não está funcionando, etc.

Se você está falando sobre C ++, uma estrutura é uma classe, exceto em uma estrutura, todos os membros são públicos por padrão. Tecnicamente (mas importante), você não está enviando uma classe ou uma estrutura, mas uma instância de um objeto ou tipo de dados primitivo.

-bn

Como Lamamac já disse, isso parece não ser um problema do seu código ou funções que você usa. É que você adicionou uma referência ao seu aplicativo chamado UDPCLIENTES AMESTRO Mas quando você inicia seu aplicativo, ele não pode encontrar o aplicativo necessário.

O primeiro método mais simples para resolver esse problema é selecionar a referência em seu projeto, clicar com o botão direito do mouse, selecionar propriedades e definir a propriedade Copie local para verdade.

Se o aplicativo agora começar a correr, você deve pensar sobre o Pedido de carga ou usando assemblyResolve ou usando ilmerge

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top