2011-10-27 121 views
0

我有问题将从wxWidgets中的套接字读取到wxString的内容。我这样做:wxWidgets从套接字读取

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; 

它一直挂在打印字符串,有没有更好的方法来做到这一点?

回答

1

您的readBuffer可能不会以null结尾。实际上,它可能只包含部分消息。

最简单的“修复”是要确保它是空值终止

您可以使用LastCount()来确定实际读取的字节数。

但是,真正的解决方法是在您的服务器和客户端之间建立一个简单的协议,以便您可以确定何时收到了整个邮件,然后才打印出来。

connection->Read(readBuffer, 255);  // leave room for null terminator 
readBuffer[connection->LastCount()/2] = L'\0';  // ensure null terminated 

我假设你使用的是unicode构建。删除/ 2如果你不是

0

如果挂起你的意思是死机,你可能会在发送的字符串末尾丢失\0。据我所知,wxString(wxChar*)将采用以空字符结尾的字符串。

+0

它没有崩溃只是没有完成执行,我不得不用ctrl-c杀死它。它实际上打印不转换为wxString失败。 – csteifel

+0

在这种情况下,如果您发布了服务器端,它可能会有所帮助。缺少'\ 0'可能会产生很长的字符串,但我不确定它在打印时会实际上是否会出现。 – Vlad