читать длинное сообщение от клиента - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь прочитать длинное сообщение от клиента, а затем распечатать на сервере stdout, но когда я запускаю код, длина данных, которые считываются с клиента, меняется почти каждый раз ...

Я также пытался использовать malloc, но результат был таким же. Мне действительно интересно, почему ...

Клиентский код хорошо сделан, проблема, кажется, на стороне сервера.

Вот соответствующая часть кода:

char buf[MAX];    //MAX=1024;
memset(buf, '\0', sizeof(buf));
size_t b;

while ((b = read(connect_fd, buf, MAX - 1)) > 0) {
    buf[b] = '\0';
    printf("%s", buf);
    flush(stdout);
    write(coonect_fd, buf, strlen(buf));
    memset(buf, '\0', MAX);
}

1 Ответ

0 голосов
/ 06 апреля 2020

Это чтение l oop кажется нормальным, могут быть проблемы где-то еще, в коде сервера или в коде клиента. Вот несколько указателей на потенциальные проблемы:

  • Нет необходимости очищать массив с помощью memset().
  • b должно быть определено как ssize_t для обнаружения read ошибок и избегайте неопределенного поведения, если read() возвращает -1.
  • , установка нулевого терминатора строго не нужна: вы можете использовать printf("%.*s", (int)b, buf); или fwrite(buf, 1, b, stdout);.
  • при записи к coonect_fd, используйте b вместо strlen(buf).
  • , убедитесь, что клиент сбрасывает свой выходной сокет.
...