我在将从wxWidgets中的套接字读取的内容转换为wxString时遇到问题。我这样做:
wxChar * readBuffer = new wxChar[256];
wxSocketClient * connection = new wxSocketClient();
connection->Connect(addr, true);
connection->Read(readBuffer, 256);
wxString wasRead(readBuffer);
std::cout << wasRead.mb_string() << std::endl;
它一直挂着打印字符串,有更好的方法吗?
答案 0 :(得分:1)
您的readBuffer可能不会以空终止。实际上,它可能只包含部分消息。
最简单的'修复'是确保它以空终止
您可以使用LastCount()来确定实际读取的字节数。
但是,真正的解决方法是在服务器和客户端之间设置一个简单的协议,以便您可以确定何时收到整个邮件,然后再打印出来。
connection->Read(readBuffer, 255); // leave room for null terminator
readBuffer[connection->LastCount()/2] = L'\0'; // ensure null terminated
我假设你正在使用unicode构建。如果你不是
,请删除/ 2答案 1 :(得分:0)
如果挂断你的意思是崩溃,你可能会在传输的字符串末尾错过\0
。据我所知,wxString(wxChar*)
将采用以null结尾的字符串。