Я пытаюсь отправить (используя функции отправки или записи) 40 байт (поскольку это требование должно работать для любой длины потока) двоичный файл через сокет. Но не удалось отправить более 8 байт. Я тоже пробовал цикл.отправка двоичного файла через сокет
какой может быть проблема.
Здесь под частью кода
char buf;
char *sbuf;
FILE *fin;
fin = fopen(file.dat, "rb");
while(fread(&buf, sizeof(char), 1, fin) > 0 && (fin != NULL))
counter++;
fseek(fin, 0 , SEEK_SET);
sbuf = (char *) malloc(sizeof(char)*(counter + 1));
fread(sbuf, 1, counter, fin);
// I tried both of this methods
int x;
x = write(s, sbuf, sizeof(sbuf));
printf("sent data size is %d\n", x); //prints 8bytes only while file.dat is of size 40bytes
// the other method
int total = 0;
int *len;
int bytesleft = *len;
while(total < *len) {
x = write(s, sbuf+total, bytesleft);
if (x == -1) { break; }
total += x;
bytesleft -= x;
}
printf("sent data size is %d\n", x); //also prints 8bytes only while file.dat is of size 40bytes
sizeof (64-разрядный указатель). Угадай - на самом деле не посмотрел код. –
Не пытаетесь ли вы дважды прочитать файл без повторного открытия или поиска? – Marian
Я использовал fseek на самом деле, хотя я не включил его здесь ... fseek (fin, 0, SEEK_SET); – user2677682