在C中的进程之间传输JPEG文件

问题描述 投票:0回答:1

我正在与客户端一起编写服务器,但在传输图像时遇到问题。我试图将fread缓冲区中的文件发送给客户端,并将其发送到新文件中的fwrite缓冲区中,并且它起作用了!现在它不再工作了,我也不知道为什么,当我检查新文件时,我的图像打开器说无法打开JPEG文件等。我的阅读代码:

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);
}

我没有粘贴服务器-客户端代码,因为上面的代码在没有发送/接收和没有字符串提取的情况下在测试程序上也无法工作,因此问题必须出在其中。

我正在使用Posix系统进行C语言编程,并使用gcc进行编译。

谢谢您的关注。

c image jpeg fwrite fread
1个回答
0
投票

由于jpeg文件是二进制文件,所以不能使用字符串函数来对其进行操作。strlen(buf)将返回直到第一个空终止符的长度。

使用memcpy

© www.soinside.com 2019 - 2024. All rights reserved.