从套接字读取的wxWidgets

时间:2011-10-27 21:29:57

标签: c++ sockets wxwidgets

我在将从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;

它一直挂着打印字符串,有更好的方法吗?

2 个答案:

答案 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结尾的字符串。