Ir ao conteúdo

Enviando union/struct via TCP IP


Carycccs

Posts recomendados

Postado

Olá! Boa tarde a todos!

 

Estou desenvolvendo um programa Cliente/Servidor que deve enviar 7 valores booleanos do Servidor para o Cliente.

Esses dados estão alocados em uma struct:

 

*** No Servidor ***

 

struct movimentos{         bool Frente;         bool Esquerda;         bool Direita;         bool Parado;         bool PassoDireita;         bool PassoEsquerda;}m;
 
E utilizo uma união que inclui esses dados e identifica o tamanho da estrutura:
 
union dados{          movimentos m;          char tamanho [(sizeof movimentos)];}uniao;
 

E depois eu uso a função send enviando o endereço da estrutura para o cliente, assim como o seu tamanho:

 

send(winsock, uniao.tamanho, sizeof(uniao.tamanho), 0); (Está certo ou eu deveria fazer de outro modo?)
 
*** No Cliente ***
 
Eu tenho a mesma estrutura que deve receber os valores presentes no endereço da estrutura assada pela função send no servidor:
 
struct movimentos{         bool Frente;         bool Esquerda;         bool Direita;         bool Parado;         bool PassoDireita;         bool PassoEsquerda;}m;
 
Que também possui uma união: (Ou aqui ela não precise existir?)
 
union dados{          movimentos m;          char tamanho [(sizeof movimentos)];}uniao;
 
E recebo (ou acho que recebo né, posso estar fazendo errado) esses dados com a função recv:
 
recv(winsock,uniao.tamanho,sizeof(uniao.tamanho),0);
 
O que eu não consigo fazer é receber os dados booleanos enviados pelo Servidor e utilizá-los no Cliente.
 
Gostaria de saber se estou fazendo tudo errado ou esse é o caminho? 
 
Fui instruída a passar os dados dessa forma, com um struct que possui os dados e uma union que engloba a struct e seu tamanho. 
 
Mas fico em dúvida sobre o que passar no segundo argumento da função send, ou o que eu estou passando está correto?
 
Socorro! 
 
=)
 
Obrigada!
:confused:  :confused:  :confused:  :confused:  :confused:  :confused:  :confused:
 
  • Membro VIP
Postado

Olá!

 

Não precisa utilizar essa union. Você pode pegar o tamanho da struct com o sizeof:

#include <stdio.h>#include <stdbool.h>struct movimentos{   bool Frente;   bool Esquerda;   bool Direita;   bool Parado;   bool PassoDireita;   bool PassoEsquerda;};int main(void) {   printf("%lu\n", sizeof(struct movimentos));   return 0;}

Na função send(), de acordo com a documentação, o segundo argumento é um ponteiro para o buffer que deseja enviar e o terceiro é seu tamanho, então ficaria:

send(winsock, &m, sizeof(m), 0);

Mesma coisa no lado cliente. ;)

 

Mais importante do que funcionar é que você entenda cada alteração que sugeri e, caso funcione, por que funcionou. Se tiver dúvida, não dorme com ela! rs

Postado

Olá Fernando! EM primeiro lugar, obrigada pela resposta!

 

Fiz como você sugeriu e funcionou! Incrível como um detalhe faz você perder tanto tempo! 

 

:lol:

 

Muito obrigada mesmo!

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...