C++ wxWidgets从套接字读取
我在将从wxWidgets中的套接字读取的内容转换为wxString时遇到问题。我是这样做的:C++ wxWidgets从套接字读取,c++,sockets,wxwidgets,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::co
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;
wxChar*readBuffer=newwxchar[256];
wxSocketClient*连接=新的wxSocketClient();
连接->连接(addr,true);
连接->读取(读取缓冲区,256);
wxString wasRead(readBuffer);
std::cout如果挂断表示崩溃,则可能是传输字符串末尾缺少一个\0
。据我所知,wxString(wxChar*)
将采用以null结尾的字符串。您的readBuffer可能不会以null结尾。事实上,它可能只包含部分消息
最简单的“修复”是确保它以null结尾
可以使用LastCount()确定实际读取的字节数
然而,真正的解决方法是在服务器和客户端之间建立一个简单的协议,这样您就可以确定何时接收到整个消息,然后再打印出来
connection->Read(readBuffer, 255); // leave room for null terminator
readBuffer[connection->LastCount()/2] = L'\0'; // ensure null terminated
我假设您使用的是unicode构建。删除/2,如果你没有它没有崩溃,只是没有完成执行,我必须用ctrl-c键杀死它。实际上,它在打印而不是转换为wxString时失败。在这种情况下,如果您发布服务器端,可能会有所帮助。丢失的\0
可能会产生很长的字符串,但我不确定它在打印时是否会挂起。