gpt4 book ai didi

python - C++ wxsocket TCP服务器发送无符号字符数组但python客户端在中获得4个字节

转载 作者:太空宇宙 更新时间:2023-11-04 13:32:30 24 4
gpt4 key购买 nike

您好,我使用 C++ TCP 套接字向 python TCP 客户端发送了一个 wxImage,如下所示:

C++ TCP Server 是这样的:

//this part is the TCP server m_sock send the unsigned char* ImageData
std::stringstream imageStream1;
imageStream1 << ImageData;
m_sock->Write(imageStream1.str().c_str(), imageStream1.str().length());

//Then I send a simple string "hello"
std::stringstream dataStream2;
dataStream2 << "hello";
m_sock->Write(dataStream2.str().c_str(), dataStream2.str().length());
dataStream2.clear();

所以我在python中收到了两条消息

// This is used to receive the image data with the exact same bytes of the ImageData
packet = socket.recv(ImageDataSize)
myWxImage.SetData(packet)

// This is used to receive the second "hello" message
packet = socket.recv(1000)

我可以成功接收图像。但是当我打印消息时,它显示“****hello”而不是“hello”。前面多了一个 4 字节的字符串。四个“*”是python无法打印出来的。它是什么?我可以摆脱它吗?

最佳答案

std::stringstream imageStream1;
imageStream1 << ImageData;
m_sock->Write(imageStream1.str().c_str(), imageStream1.str().length());

看起来是个坏主意。我不知道 ImageData 的类型,但将其转换为 std::stringstream 绝对不是解决此问题的最佳方法。如果 ImageData 仅包含对原始图像缓冲区的引用,请使用它。图像不是字符串,显然,如果您从数据中可能包含 \x00 的对象中获取 c_str()(因为这通常会终止 C字符串)。

然后:

//Then I send a simple string "hello"
std::stringstream dataStream2;
dataStream2 << "hello";
m_sock->Write(dataStream2.str().c_str(), dataStream2.str().length());
dataStream2.clear();

嗯,你明白你在这里写的是什么吗?您采用完全有效的 C 字符串 "hello",将其推送到字符串流中,只是为了再次获取 C 字符串吗?

老实说:我认为您是在不理解示例代码的情况下复制粘贴代码。您应该在使用前返回并理解每一行。

关于python - C++ wxsocket TCP服务器发送无符号字符数组但python客户端在中获得4个字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30909364/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com