2011-10-27 122 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