不能使用向量< T>向服务器发送许多图像。在C ++中 [英] Not able to send many images to server using vector<T> in C++
问题描述
我正在将具有默认参数char *的函数的签名更改为vector< string>在C ++中。具有默认参数char *的函数的作用是取出图像文件的图像名称,然后读取该图像文件并发送到服务器。此功能仅能发送一个图像文件。所以,我去了vector< string>一次发送多个图像。但是,在某些地方我错过了一些我无法找到的东西。请帮忙。
我尝试过:
默认功能参数char *:
void fileSend(char * fpath)
{
//仅从给定路径中提取文件名。
char filename [50];
int i = strlen(fpath);
for(; i> 0; i--)
{
if(fpath [i - 1] =='\\')
break;
}
for(int j = 0; i< =(int)strlen(fpath); i ++)
{
filename [j ++] = fpath [i];
}
ifstream myFile(fpath,ios :: in | ios :: binary | ios :: ate);
int size =(int)myFile.tellg();
myFile.close();
char filesize [10]; itoa(size,filesize,10);
send(sock,filename,strlen(filename),0);
char rec [32] =;
recv(sock,rec,32,0);
send(sock,filesize,strlen(filesize),0);
recv(sock,rec,32,0);
FILE * fr = fopen(fpath,rb);
while(size> 0)
{
char buffer [1030];
if(size> = 1024)
{
fread(buffer,1024,1,fr);
发送(sock,buffer,1024,0);
recv(sock,rec,32,0);
}
其他
{
fread(缓冲区,大小,1,fr);
buffer [size] ='\0';
发送(袜子,缓冲区,大小,0);
recv(sock,rec,32,0);
}
size - = 1024;
}
fclose(fr);
}
默认参数为vector< string>的函数:
void fileSend(vector< string> ; fnames)
{
char * filename;
for(int k = 0; k< fnames.size(); k ++)
{
int i = fnames [k] .length;
for(; i> 0; i--)
{
if(fnames [k] [i - 1] =='\\')
休息;
}
for(int j = 0; i< = fnames [k] .length(); i ++)
{
filename [j ++] = fnames [k] [一世];
}
ifstream myFile(fnames [k],ios :: in | ios :: binary | ios :: ate);
int size =(int)myFile.tellg();
myFile.close();
char filesize [10]; itoa(size,filesize,10);
send(sock,filename,strlen(filename),0);
char rec [32] =;
recv(sock,rec,32,0);
send(sock,filesize,strlen(filesize),0);
recv(sock,rec,32,0);
FILE * fr = fopen(fnames [k],rb);
while(size> 0)
{
char buffer [1030];
if(size> = 1024)
{
fread(buffer,1024,1,fr);
发送(sock,buffer,1024,0);
recv(sock,rec,32,0);
}
其他
{
fread(缓冲区,大小,1,fr);
buffer [size] ='\0';
发送(袜子,缓冲区,大小,0);
recv(sock,rec,32,0);
}
size - = 1024;
}
fclose(fr);
}
}
直接的方法是重载旧函数(并调用它) :
void fileSend(vector< string> fnames)
{
for ( int k = 0 ; k< fnames.size(); k ++)
{
fileSend(fnames [k] .c_str()); // 调用原始函数
}
}
I am changing the signature of a function having default argument char* to vector<string> in C++. The role of function with default argument char* is to take out the image name of an image file, then read that image file and send to the server. This function is only capable of sending one image file. So, I went for vector<string> to send multiple images at once. But, somewhere I am missing on something which I am not able to find out. Please help.
What I have tried:
Function with default parameter of char*:
void fileSend(char *fpath) { // Extract only filename from given path. char filename[50]; int i = strlen(fpath); for (; i > 0; i--) { if (fpath[i - 1] == '\\') break; } for (int j = 0; i <= (int)strlen(fpath); i++) { filename[j++] = fpath[i]; } ifstream myFile(fpath, ios::in | ios::binary | ios::ate); int size = (int)myFile.tellg(); myFile.close(); char filesize[10]; itoa(size, filesize, 10); send(sock, filename, strlen(filename), 0); char rec[32] = ""; recv(sock, rec, 32, 0); send(sock, filesize, strlen(filesize), 0); recv(sock, rec, 32, 0); FILE *fr = fopen(fpath, "rb"); while (size > 0) { char buffer[1030]; if (size >= 1024) { fread(buffer, 1024, 1, fr); send(sock, buffer, 1024, 0); recv(sock, rec, 32, 0); } else { fread(buffer, size, 1, fr); buffer[size] = '\0'; send(sock, buffer, size, 0); recv(sock, rec, 32, 0); } size -= 1024; } fclose(fr); }
Function with default parameter of vector<string>:
void fileSend(vector<string> fnames) { char *filename; for (int k = 0; k < fnames.size(); k++) { int i = fnames[k].length; for (; i > 0; i--) { if (fnames[k][i - 1] == '\\') break; } for (int j = 0; i <= fnames[k].length(); i++) { filename[j++] = fnames[k][i]; } ifstream myFile(fnames[k], ios::in | ios::binary | ios::ate); int size = (int)myFile.tellg(); myFile.close(); char filesize[10]; itoa(size, filesize, 10); send(sock, filename, strlen(filename), 0); char rec[32] = ""; recv(sock, rec, 32, 0); send(sock, filesize, strlen(filesize), 0); recv(sock, rec, 32, 0); FILE *fr = fopen(fnames[k], "rb"); while (size > 0) { char buffer[1030]; if (size >= 1024) { fread(buffer, 1024, 1, fr); send(sock, buffer, 1024, 0); recv(sock, rec, 32, 0); } else { fread(buffer, size, 1, fr); buffer[size] = '\0'; send(sock, buffer, size, 0); recv(sock, rec, 32, 0); } size -= 1024; } fclose(fr); } }
The straightforward way to do that is overloading the old function (and call it):
void fileSend(vector<string> fnames) { for (int k = 0; k < fnames.size(); k++) { fileSend( fnames[k].c_str()); // call the original function } }
这篇关于不能使用向量< T>向服务器发送许多图像。在C ++中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!