【发布时间】:2015-09-18 18:04:33
【问题描述】:
我正在尝试通过 TCP 发送 Mat 图像。首先将 Mat 转换为 uchar,然后转换为 char 格式。整张 char 格式的图像会逐个缓冲区发送出去,缓冲区大小为 1024 字节。以下是我的代码。
Mat decodeImg = imdecode(Mat(bufferFrame), 1);
uchar *transferImg = decodeImg.data;
char* charImg = (char*) transferImg;
int length = strlen(charImg);
int offset = 0;
while (true)
{
bzero(bufferSend, BUFFER_SIZE);
if (offset + BUFFER_SIZE <= length)
{
for (int i = 0; i < BUFFER_SIZE; i++)
{
bufferSend[i] = charImg[i + offset];
}
// memcpy(charImg+offset, bufferSend,BUFFER_SIZE);
if (send(sockfd, bufferSend, sizeof(bufferSend), 0) < 0)
{
printf("Send FIle Failed,total length is%d,failed offset is%d\n",
length,
offset);
break;
}
}
else
{
for (int i = 0; i < length - offset; i++)
{
bufferSend[i] = charImg[i + offset];
}
if (send(sockfd, bufferSend, sizeof(bufferSend), 0) < 0)
{
printf("Send FIle Failed,total length is%d,failed offset is%d\n",
length,
offset);
break;
}
break;
}
offset += BUFFER_SIZE;
}
代码输出显示:发送文件失败,总长度为251035,失败偏移量为182272。
非常感谢您的帮助。提前谢谢!
【问题讨论】:
-
可能你需要encode base64
-
如果是这种情况,唯一的问题应该是服务器无法识别图像。但是,当前的问题是该客户端无法发送整个缓冲区。
-
什么是
bufferFrame?你不应该发送imencoded char 缓冲区吗? -
系统调用总是失败,原因您可以查询:
errno。使用strerror(errno)或perror。您应该阅读他们的文档。 -
@black 很奇怪,两个人怎么能在问题提出一个小时后同时发布本质上相同的帖子。