Как создать буфер для чтения данных сокета в C - PullRequest
6 голосов
/ 27 сентября 2008

Использование программирования сокетов на C / C ++ и метод read (socket, buffer, BUFSIZE). Что такое «буфер», я знаю, что char и byte - это одно и то же, но имеет ли значение, сколько элементов содержит байтовый массив? Нужно ли, чтобы буфер мог содержать все сообщение до нулевого символа?

Ответы [ 3 ]

13 голосов
/ 27 сентября 2008

BUFSIZE должен быть равен размеру вашего буфера в байтах. read () прекратит чтение, когда буфер заполнится. Вот пример:

#define MY_BUFFER_SIZE 1024

char mybuffer[MY_BUFFER_SIZE];
int nBytes = read(sck, mybuffer, MY_BUFFER_SIZE);
5 голосов
/ 15 октября 2008

Как всегда, используйте sizeof, когда у вас есть такая возможность. Используя встроенный оператор sizeof, вы просите компилятор вычислить размер переменной, а не указывать его самостоятельно. Это снижает риск появления ошибок, когда размер фактической переменной отличается от того, что вы думаете.

Итак, вместо того, чтобы делать

#define BUFSIZE 1500
char buffer[BUFSIZE];
int n = read(sock, buffer, BUFSIZE);

вы действительно должны использовать

char buffer[1500];
int n = read(sock, buffer, sizeof buffer);

Обратите внимание, что вам не нужно заключать в скобки аргумент sizeof, если аргумент не является именем типа.

0 голосов
/ 27 сентября 2008

Ваша реализация сокетов не требует, чтобы буфер был достаточно большим, чтобы точно хранить все сообщение, но это может быть удобно в зависимости от того, что вы делаете.

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