Код должен отслеживать, сколько символов прочитано, а затем printf(), write()
столько символов.
while (end_loop == 1) {
...
// for (int i = 0; i < BUFFER_LENGTH - 1; i++) {
int i;
for (i = 0; i < BUFFER_LENGTH - 1; i++) {
...
}
// for (int i = 0; i < BUFFER_LENGTH - 1; i++) {
// printf("%c", to_send[j]);
for (int j = 0; j < i; j++) {
...
// n = write(sockfd, to_send, BUFFER_LENGTH);
n = write(sockfd, to_send, i);
...
}
Другие проблемы включают
Тест на EOF
, не только feof(f)
c = fgetc(f);
// if (feof(f)) { // If end of file break loop
if (c == EOF) { // If end of file break loop **or input error**
Нет необходимости в -1 при заполнении массива char
. -1 может быть полезен со строками, но использование здесь не самая лучшая идея, так как fgetc()
может возвращать нулевой символ .
// vvv
// for (int i = 0; i < BUFFER_LENGTH - 1; i++)
for (int i = 0; i < BUFFER_LENGTH; i++)
// or better
size_t i;
for (i = 0; i < sizeof to_send; i++)
ОП исправленный код среднего ответа Хмммммммм.
Не использовать for (int i = 0; i < strlen(to_send); i++) {
. Считываемые данные могут содержать нулевые символы , что отрицает правильное использование строк здесь.
Если OP не хочет видеть "EOF\n"
перед последней строкой, выведите "EOF\n"
после цикла while
.