c ++ отправляет recv на сокеты - PullRequest
1 голос
/ 07 декабря 2011

Я пишу клиентскую программу сервера, которая должна общаться друг с другом.У меня есть записи, хранящиеся в памяти, и я хочу отправить все эти записи клиенту.Прямо сейчас я сначала отправляю номер или записи клиентам, затем пытаюсь использовать цикл while для отправки каждой записи, но я получаю только первую запись на стороне клиента.Код клиента является первым: введите код здесь

      while(i < j){
      recv(sockfd,infobuf,BUFFERSIZE-1,0);//records from mem
      printf("\nrecords revieved %s",infobuf);
      memset(infobuf,'\0',BUFFERSIZE);
      i++;
      }

Код сервера ниже:

     //send number of rec to client
     printf("count as j %s", recordList);
     send(reply_sock1_fd,recordList,strlen(recordList),0);
     memset(recordList,'\0',BUFFERSIZE);
     printf("\n count %d:", count);

     int i = 0;


     //look and send records to client
     while(i < count){
        printf("\ninside loopi (%d)", i);
        strcat(strcat(strcat(strcat(strcpy(recordList,bufRec[i].first), "          "),bufRec[i].last), " "),bufRec[i].userid);
        printf("recordlist %s", recordList);
        send(reply_sock1_fd,recordList,BUFFERSIZE,0);
        memset(recordList,'\0',BUFFERSIZE);
        i++;
        }

1 Ответ

0 голосов
/ 07 декабря 2011

Не совсем уверен, в чем ваша проблема, но вы не проверяете код возврата при вызове recv().Это должно быть либо положительное число, указывающее количество фактически полученных байтов, отрицательное число, указывающее на ошибку, либо 0, указывающее на разорванное соединение.

Обратите внимание, что довольно часто можно получить меньше данных, чем запрашивалипосмотрите, как справиться с этой ситуацией в руководстве здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...