Как отправлять и получать данные сокета TCP (C / C ++) [дубликаты]

Возможный дубликат:

Как правильно читать с TCP-сокета в C / C ++?

Я пытаюсь разработать TCP клиент / сервер. Моя проблема в том, что когда я пытаюсь отправить данные от клиента, я делаю это за один раз.

Но моя проблема возникает, когда я пытаюсь получить данные с определенной структурой, то есть первые 8 байтов устанавливают дату, следующие 10 байтов устанавливают текст, а неопределенное количество байтов задает текст (этот текст заканчивается на / r / n / г / п)

Клиент отправляет следующее:

char date[8];
char name[10];
char msg[4096];

strcpy(msg,"12/10/12"); //8 bytes
strcat(msg,"Kevin Fire"); //10 bytes
strcat(msg,"abcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcde\r\n\r\n");

nbytes_sent = send(sock,(char *)msg,sizeof(msg),0);
printf("Bytes_sent: %s -> %i\n",msg,nbytes_sent);

И сервер пытается проанализировать данные из сокета следующим образом:

char date[8];
char name[10];
char * text;
char buf[1024];

int i=0;
for(i=0; i < 8; i++)
    date[i] = '\0';
for(i=0; i < 10; i++)
    name[i] = '\0';

nbytes_read=recv(sclient,(char *)date,sizeof(date),0);
if(nbytes_read > 0){
    printf("Date: %s (%i)\n",date,nbytes_read);
    //cout.flush();
    nbytes_read=recv(sclient,(char *)name,sizeof(name),0);
    if(nbytes_read > 0){
        printf("Name: %s (%i)\n",name,nbytes_read);
        //cout.flush();
        nbytes_read=recv(sclient,(char *)buf,sizeof(buf),0);
        strcpy(text,buf);
        while(nbytes_read > 0){
            nbytes_read=recv(sclient(char*)buf,sizeof(buf),0);
            strcat(text,buf);
        }
    }
}

printf("Date: %s. Name: %s. Text: %s\n",date,name,text);

Ответы на вопрос(3)

Ваш ответ на вопрос