Modificação do tamanho do pacote em sockets [closed]

1

Estou fazendo programação de soquete em QT e tenho que projetar um protocolo para transferir dados sobre TCP / IP.

Agora meu design de protocolo é SIMPLES e envia comandos de uma maneira que o primeiro BYTE dos dados gravados no soquete para cada gravação será o COMMAND. Então, sempre que eu escrever no socket usando socket- > write ("CDATA") o primeiro byte, "C" neste caso significará um comando para o servidor fazer algo.

Eu só quero saber uma coisa: se a gravação será dividida em várias leituras no servidor? Eu sei que haverá um tamanho de buffer no servidor para a leitura. Mas o socket- > write () no cliente pode ser recebido em múltiplos READs no servidor quando a gravação está dentro dos limites de buffer do servidor?

Para esclarecer esta questão, vou dar um exemplo Vamos dizer que o tamanho do buffer de leitura do soquete no servidor é 4096 BYTES. O cliente escreve socket- > write ("CDATA") no servidor. Agora existe alguma possibilidade que o servidor receba isso em mais de um lê? Porque eu tenho um loop while no servidor:

while{
 char str[] = socket->read();
 // What is the coomand in the first byte 
 if(str[0] == "C"){
  // Do something
 }
}

Se os dados enviados pelo cliente forem recebidos em mais de uma leitura (mesmo que o cliente tenha enviado em uma gravação), meu design de protocolo falhará

Suas entradas são muito apreciadas.

    
por Raheel 08.11.2012 / 14:32

1 resposta

0

Sim, você deve sempre permitir a possibilidade de não ler um 'comando' completo.

Considere, por exemplo, o caso de enviar vários comandos de uma só vez. Você não tem ideia de onde o limite de pacotes irá acontecer.

Você precisa de código para recombinar o tráfego do outro lado e dividi-lo em partes processáveis.

    
por 08.11.2012 / 15:39