如何在套接字上发送矢量<无符号字符>
how to send on socket a vector<unsigned char>
我正在尝试做一个简单的客户端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
,但嘈杂似乎有效。有什么线索吗?
谢谢
这里有一种方法可以做到这一点:
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);
}
}
相关文章:
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 将无符号char*转换为std::istream*C++
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- C++中无符号字符溢出
- 使用无符号字符数组有效存储内存
- 如何打印boost多精度128位无符号整数
- C++模板函数,用于比较任何无符号整数和有符号整数
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 获取隐式转换溢出从无符号到已签名的警告
- 如何在保持其值的同时将 c++ 无符号字符变量转换为 char 变量
- 从 std::vector<无符号字符>切片中提取 int?
- 是什么导致了这种使用三进制而不是短整型的有符号int到无符号int转换
- 无法在 Arduino 中uint8_t数组转换为无符号长整型数组
- 将无符号字符的向量存储在数组中会给我 std::bad_alloc
- 使用 fopen 打开 .pak 文件并使该文件应用于 const 无符号字符* (C++)
- C4018:类内有符号、无符号不匹配
- C++无符号短裤的划分导致 int
- 这是做什么的?如果(无符号(dx) & lt;无符号(大小))