如何在socket上发送一个vector <unsigned char =“”>

时间:2017-07-05 12:57:26

标签: c++ sockets tcp

我试图做一个简单的客户端tcp(我有一台服务器已经工作)。 我已经定义了2个变量:

  1. std::vector<unsigned char> buffer(1000);
  2. std::vector<std::vector<unsigned char>> buff; buffer我使用它来读取无符号字符的链,当读取完成后,我将它存储在buff上,然后我再次开始阅读。 我已经定义了地址,端口等的所有过程,当发送buffer字符串时,我遇到了问题。 这是我到目前为止所做的尝试:

    while(!buff.empty()){
        // Sockets Layer Call: send(
        n = send(sockfd, buff.back(), buff.back.size(), 0);
        std::this_thread::sleep_for(std::chrono::milliseconds(delay)) ;
        buff.pop_back();
    
        if (n < 0){
            std::cout<<"ERROR writting to socket"<<std::endl;
            exit(1);
        }
    }
    
  3. 我尝试添加(char *),还有reinterpret_cast,但是noithing似乎有效。任何线索?

    由于

2 个答案:

答案 0 :(得分:0)

这是你可以做到的一种方式:

   std::vector<std::vector<unsigned char>> buff;
   //...
   for (std::vector<std::vector<unsigned char>> i = buff.begin(); 
        i != buff.end(); ++i)
   {
     std::vector<char>::iterator next = i->begin();
     while (next != i->end())
     {
       // if you don't have std::distance, use i->end() - next
       n = send(sockfd, &(*next), std::distance(next, i->end()), 0);
       if (n < 0)
       {
         std::cout<<"ERROR writing to socket"<<std::endl;
           exit(1);
       }
       next += n;
       if (n != i->end())
       {
         std::this_thread::yield();
       }
     }
   }

答案 1 :(得分:-1)

如果你试图在向量中发送所有向量,你或多或少都在正确的轨道上......但是你的循环永远不会终止,因为你永远不会弹出buff中的最后一个元素

while(!buff.empty()){
    // Sockets Layer Call: send(
    n = send(sockfd, &(buff.back()[0]), buff.back().size(), 0);
    buff.pop_back();   // need to remove what you just sent?
    std::this_thread::sleep_for(std::chrono::milliseconds(delay)) ;

    if (n < 0){
        std::cout<<"ERROR writting to socket"<<std::endl;
        exit(1);
    }
}