不能使用向量< T>向服务器发送许多图像。在C ++中 [英] Not able to send many images to server using vector<T> in C++

查看:44
本文介绍了不能使用向量< T>向服务器发送许多图像。在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
   }
}


这篇关于不能使用向量&lt; T&gt;向服务器发送许多图像。在C ++中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆