簡體   English   中英

如何在套接字上發送向量<unsigned char>

[英]how to send on socket a vector<unsigned char>

我試圖做一個簡單的客戶端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); } } 

我嘗試添加(char *) ,也添加了reinterpret_cast ,但是什么都沒用。 有什么線索嗎?

謝謝

這是您可以做到的一種方法:

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

如果您嘗試發送矢量中的所有矢量,那么您或多或少都在正確的軌道上...但是,循環永遠不會終止,因為您永遠不會從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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM