как прочитать более 256 байтов через сокет в C - PullRequest
0 голосов
/ 13 марта 2012

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

   n=read(sockfd,rbuffer,255);

, где rbuffer - мой буфер.

Если я пытаюсь увеличить размер, указанный в операторе чтения (255), я получаю ошибку сегментации.

Теперь, когда я знаю, что клиент получает только частичную информацию, отправленную сервером. Как я могу изменить или изменить способ чтения информации, чтобы я мог прочитать все байты?

PS: размер строки очень большой, так как я пытаюсь отправить строку XML через.

Ответы [ 2 ]

3 голосов
/ 13 марта 2012

Вам также нужно увеличить размер rbuffer. Один из способов сделать это может быть:

unsigned char rbuffer[4096];
n = read(socksfd, rbuffer, sizeof(rbuffer));

Таким образом, если вы решите изменить размер, вам нужно будет сделать это только в одном месте.

2 голосов
/ 13 марта 2012

Что ж, когда вы смотрите на документацию по системному вызову read () , он говорит, что последний аргумент - это размер вашего буфера.

В вашем случае вам понадобитсячтобы убедиться, что rbuffer достаточно велико!

Я думаю, у вас есть где-то:

unsigned char rbuffer[255];
n = read( sockfd, rbuffer, 255);

Вы захотите сделать это:

unsigned char rbuffer[1024];
n = read( sockfd, rbuffer, 1024);

Чтобыубедитесь, что в качестве размера не указано недопустимое значение, используйте sizeof( rbuffer ) , если оно расположено в стеке (как указано выше).

Если он выделяется динамически, вам придется использовать размер, который вы использовали при выделении буфера:

int bufsize = 1024;
char *buffer = malloc(bufsize);
n = read( sockfd, buffer, bufsize);
...