1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[C] Leitura e escrita de vector de strings por socket

Discussão em 'Programação' iniciada por MrVerissimo, 22 de Novembro de 2008. (Respostas: 7; Visualizações: 1646)

  1. MrVerissimo

    MrVerissimo Power Member

    Boas,

    Estou a fazer um programa em que numa das partes um servidor comunica com um cliente mandando-lhe um array de strings por socket. No entanto não estou a conseguir fazer isto. Muitas vezes dá-me seg fault no cliente e outras vezes imprime no cliente o vector de strings mas "(null)" por cada string. O erro acho que está mesmo na forma como estou a enviar o array por socket.
    Tenho isto no servidor:

    Código:
    char **array;
    ...
    write(sock, (char *)array, sizeof(array));
    E no cliente:

    Código:
    char **array;
    ...
    read(sock2, (char *)array, sizeof(array));

    Pedia a vossa ajuda nisto uma vez que ja procurei pela internet e aqui no forum e nao consigo solucionar o problema.

    Cumps e obg desde ja
     
  2. raVemjr

    raVemjr I'm cool cuz I Fold

    Vai ser meio bitaite, mas tu estás a mandar um array de ponteiros. E como cada processo tem a sua tabela de memoria, isso vai dar barraca. Manda só uma string de cada vez, e cria uma função para juntar isso tudo num array.
     
  3. DJS

    DJS Power Member

    exactamente. Mais vale mandar um array de chars de cada vez.
     
  4. MrVerissimo

    MrVerissimo Power Member

    Obrigado pelas respostas. Vou tentar =).

    Mas ja agora, não há mesmo forma de passar o conteudo dos apontadores, ou seja as strings, todas de uma so vez? É que neste caso iria dar-me algum jeito.
     
    Última edição: 23 de Novembro de 2008
  5. raVemjr

    raVemjr I'm cool cuz I Fold

    Bem, agora que falas nisso, tive um problema semelhante no meu proj de SO.

    Concatena as strings todas só numa, e usa um separador, tipo o caracter '\t' para depois a voltares a partir. Assim fazes só um send e um receive, mas depois tens de partir a concatenação de strings...
     
  6. DJS

    DJS Power Member

    É o que dá o C não ter objectos :007:
     
  7. sapropel

    sapropel Power Member

    podes, fazes uma struct ou concatenas como já foi sugerido. agora não quero estar a mandar bitaites mas acho que sockets têm limite de tamanho que se pode mandar/receber de cada vez. acho que é 1024 bytes mas não tenho a certeza.
    um guia brutal: http://www.beej.us/guide/bgnet/
     
  8. MrVerissimo

    MrVerissimo Power Member

    Obrigado.

    Já ta a bombar. Tive de mandar uma de cada vez. Das formas que me indicaram foi a mais facil de implementar uma vez que me bastou fazer um ciclo for. Concatenar tb seria uma boa ideia mas dava mais trabalhinho.

    Cumps
     

Partilhar esta Página