问题描述
我不太确定为什么。但是我通过网络连接发送的文件出现内存溢出。
我使用 send.txt 作为一个测试文件,其中包含几百万位数的 pi 从客户端发送到服务器,第一次运行效果很好。文件复制没有错误,但如果我尝试再次发送同一个文件,它会像以前一样重写文件,但会出现内存溢出? p
我应该提到服务器端是多线程的,如果这很重要的话,可以同时允许多个连接。我不认为会,但我认为那会是相关信息。
服务器
void write_file(int sockfd)
{
FILE *fp;
char fileName[100] = {0};
char fileLenStr[100] = {0};
int fileLen;
char byte[1] = {0};
char *buffer;
while (1)
{
read(sockfd,byte,1);
if (byte[0] == 32)
{
break;
}
size_t len = strlen(fileName);
printf("%s\n",fileName);
if (len == 0)
{
fileName[0] = byte[0];
}
else
{
fileName[len++] = byte[0];
len = strlen(fileName);
fileName[len++] = '\0';
}
}
while (1)
{
size_t len;
read(sockfd,1);
if (byte[0] == 32)
{
len = strlen(fileLenStr);
break;
}
len = strlen(fileLenStr);
printf("%ld\n",len);
if (len == 0)
{
fileLenStr[0] = byte[0];
}
else
{
fileLenStr[len++] = byte[0];
len = strlen(fileLenStr);
fileLenStr[len++] = '\0';
}
}
printf("%s\n",fileName);
fileLen = atoi(fileLenStr);
buffer = (char *)malloc(fileLen * sizeof(char));
read(sockfd,buffer,(fileLen * sizeof(char)));
fp = fopen(fileName,"w");
fwrite(buffer,1,strlen(buffer),fp);
fclose(fp);
free(buffer);
return;
}
客户
void pushFile(char *fileName,int clientSocket)
{
char cmd[60] = {0};
char *data;
char response[4];
FILE *fp;
struct stat stats;
int intfileSizeinBytes;
char fileSizeinBytes[10];
int st = stat(fileName,&stats);
if(st == -1)
{
printf("Error in stat method...\n");
}
else
{
intfileSizeinBytes = (int)stats.st_size;
sprintf(fileSizeinBytes,"%d",intfileSizeinBytes);
}
fp = fopen(fileName,"rb");
if(fp == NULL)
{
printf("File can't be opened...\n");
exit(0);
}
data = (char *)malloc(intfileSizeinBytes * sizeof(char));
fread(data,intfileSizeinBytes,fp);
//remove(fileName);
fclose(fp);
printf("FILENAME: %s\n",fileName);
sprintf(cmd,"PUSH %s %d ",fileName,intfileSizeinBytes);
int w = send(clientSocket,cmd,strlen(cmd),0);
w = send(clientSocket,data,strlen(data),0);
free(data);
return;
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)