Я пишу сервер с клиентом, и у меня возникают проблемы с передачей изображений. Я попытался fread
файл в буфере, чтобы отправить буфер клиенту и fwrite
буфер в новый файл, и это сработало! Теперь он больше не работает, и я не знаю, почему, когда я проверяю новый файл, мой инструмент для открытия изображений говорит, что невозможно открыть файл JPEG и т. Д. c.
Мой код чтения:
int fd=open(pathname, O_RDONLY, 0666);
struct stat fileStat;
if(fstat(fd,&fileStat) < 0)
{
perror("\nfilestat\n");
exit(-1);
}
int fileSize=(int)fileStat.st_size;
//printf("File Size: \t\t%d bytes\n",fileSize);
FILE *f=fdopen(fd, "rb");
if(f==NULL)
{
perror("\nfopen\n");
exit(-1);
}
void *buf=malloc(fileSize);
if(buf==NULL)
{
perror("\nmalloc\n");
return -1;
}
int FR=fread(buf, fileSize, 1, f);
if(FR<0)
{
perror("\nfread\n");
exit(-1);
}
Затем я пишу тело на моем сервере сообщение:
punt+=sprintf(punt, "%s\r\n", (char *)buf);
И после того, как клиент извлек его из полученного сообщения, я пишу его в новый файл:
char *clientfile="./qui.jpg";
int fdbis=open(clientfile, O_WRONLY|O_CREAT|O_TRUNC, 0666);
if(fdbis<=0)
{
perror("\nopen 2\n");
exit(-1);
}
FILE *fbis=fdopen(fdbis, "wb");
if(fbis==NULL)
{
perror("fdopen");
exit(-1);
}
int WR=fwrite((void*)buf, strlen(buf), 1, fbis);
if(WR<=0)
{
perror("\nfwrite\n");
exit(-1);
}
Я не вставляю свой код сервер-клиент, потому что приведенный выше код не работает ни в тестовой программе без отправки / получения и без извлечения строки, поэтому проблема должна заключаться в этом.
Я программирую на C, используя систему Posix, и компилирую с помощью g cc.
Спасибо за внимание.