我试图做一个简单的客户端tcp(我有一台服务器已经工作)。 我已经定义了2个变量:
std::vector<unsigned char> buffer(1000);
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
,但是noithing似乎有效。任何线索?
由于
答案 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);
}
}