Pergunta

Eu sou um pouco novo para C, mas eu fiz a minha lição de casa (alguns tutoriais, livros, etc.) e eu preciso programar um simples servidor às solicitações do punho de clientes e interagir com um db. Eu já passei por Guia do Beej à programação de rede, mas estou um pouco inseguro sobre como peça juntos e lidar com diferentes partes dos dados sendo enviados e para trás.

Por exemplo, digamos que o cliente está enviando algumas informações que o servidor irá colocar em vários campos. Como faço para reunir esses dados para ser enviado e depois quebrá-lo backup no lado do servidor?

Obrigado,

Eric

Foi útil?

Solução

Se bem entendi, você está pedindo, "como é que o servidor entender as informações que o cliente envia-lo"?

Se é isso que você está perguntando, a resposta é simples: é mutuamente acordado de antemão que as estruturas de dados cada usos será compatível. Ou seja, de decidir sobre o que o seu protocolo de comunicação será antes do tempo.

Assim, por exemplo, se eu tiver uma aplicação cliente-servidor onde o cliente se conecta e pode pedir coisas como "tempo", "data" e pode dizer "settime" e "setDate", eu preciso escrever meu servidor de tal forma que ele vai entender os comandos.

Obviamente, no caso acima é trivial, uma vez que seria apenas um protocolo baseado em texto. Mas vamos dizer que você está escrevendo um aplicativo que irá retornar uma struct de informações, ou seja.

struct Person {
    char* name;
    int age;
    int heightInInches;
    // ... other fields ...
};

Você pode escrever toda a estrutura a partir do servidor / cliente. Neste caso, há algumas coisas para estar ciente de:

  1. Você precisa hton / ntoh corretamente
  2. Você precisa ter certeza de que o seu cliente e servidor ambos podem compreender a estrutura em questão.
  3. Você pode ou não ter de alinhar em um limite 4B (porque se você não fizer isso, diferentes compiladores C podem fazer coisas diferentes, que podem queimá-lo entre o cliente eo servidor, ou talvez não).

Em geral, porém, ao escrever um aplicativo cliente / servidor, a coisa mais importante para obter direito é o protocolo de comunicação.

Eu não tenho certeza se isso bastante responde a sua pergunta. É isso que você estava atrás, ou você estava perguntando mais sobre como, exatamente, você usa as funções de envio / Receber?

Outras dicas

Primeiro, você define como o pacote vai olhar - que informação vai estar nele. Certifique-se a definição está em um formato arquitetura neutra. Isso significa que você especificar isso em uma seqüência que não depende se a máquina é big-endian ou little-endian, por exemplo, nem se você está compilando com long 32 bits ou valores long de 64 bits. Se o conteúdo é de comprimento variável, certifique-se a definição contém as informações necessárias para dizer quanto tempo cada parte é -., Em particular, cada parte de comprimento variável deve ser precedida por uma contagem adequada de seu comprimento

Quando você precisa para empacotar os dados para transmissão, você terá os valores brutos (específico da máquina) e gravá-los em um buffer (pense 'array de caracteres') nas posições apropriadas, no formato adequado.

Este tampão será enviada pela rede para o receptor, o que vai lê-lo num outro tampão, e depois inverter o processo para obter a informação da memória tampão em locais variáveis.

Existem funções, tais como ntohs() converter de uma rede ( 'n') para hospedeiro ( 'h') de formato para um 'curto' (ou seja, 16 bits) número inteiro, e htonl() Para converter de um hospedeiro 'longa' (32-bit inteiro) para o formato de rede -. etc

Um livro bom para o networking é Stevens' " Rede UNIX, Vol 1, 3ª Edn ". Você pode descobrir mais sobre ele em seu web site, incluindo exemplo de código.

Como já foi mencionado acima o que você precisa é um meio previamente acordadas de comunicação. Uma coisa que me ajuda é usar xmls para se comunicar.

por exemplo. Você precisa de tempo para enviar tempo para o cliente, em seguida, incluí-lo em uma tag chamada tempo. Em seguida, analisá-lo no lado do cliente e ler o valor do tag.

A maior vantagem é que quando você tem um analisador no lugar no lado do cliente, em seguida, mesmo se você tem que enviar alguma informação nova-los apenas tem que concordar em um nome de marca que será analisado no lado do cliente.

Isso me ajuda, eu espero que ajude você também.

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