Я начинаю заниматься программированием сокетов, и у меня возникает проблема при отправке данных через сокет с использованием другого размера буфера для отправителя и получателя. Мне нужно сделать 2 основных программы, говорящего и слушателя. Нужно отправить все, что было передано в stdin, отправить его по сокету, и ресивер должен распечатать данные. Проблема заключается в том, что при использовании различного размера буфера для отправителя и получателя данные, которые печатаются приемником, являются неполными или неработоспособными. Я не понимаю, почему?проблема при отправке и в буферном буфере различны
Вот наиболее актуальные кусок кода:
СЛУШАТЕЛЬ:
#define BUFFERSIZE 20
...
while((numbytes = recv(new_fd, buf, BUFFERSIZE - 1, 0)) > 0) {
buf[numbytes] = 0;
printf("%s", buf);
}
perror("recv");
Говорун:
#define BUFFERSIZE 10
...
while(fgets(buffer, BUFFERSIZE , stdin) != NULL)
{
printf("%s", buffer);
if ((numbytes = send(sockfd, buffer, sizeof buffer, 0)) == -1) {
perror("talker: sendto");
exit(1);
}
printf("\n");
}
Например, с этим файл теста:
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
будут печататься
➜ ./listener
abcdefghijklmnopqrabcdefghiiz
recv: Success
abcdefghijklmnopqrr
Что это такое, что я делаю неправильно?
Спасибо за вашу работу!
Какова ценность MAXBUFLEN? –
это была ошибка: она должна была быть BUFFERSIZE. спасибо :) –