чтение wxWidgets из сокета - PullRequest
       4

чтение wxWidgets из сокета

0 голосов
/ 28 октября 2011

У меня проблемы с преобразованием того, что читается из сокета в 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 ]

1 голос
/ 28 октября 2011

Ваш readBuffer вполне может не быть нулевым.Фактически, оно может содержать только частичное сообщение.

Самое простое «исправление» - убедиться, что оно завершено нулем

Вы можете использовать LastCount () для определения количества фактически прочитанных байтов.

Однако реальное исправление состоит в том, чтобы установить простой протокол между вашим сервером и клиентом, чтобы вы могли определить, когда было получено все сообщение, и только затем распечатать его.

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

Я предполагаю, что вы используете сборку Unicode.Удалите / 2, если вы не

0 голосов
/ 28 октября 2011

Если, повесив трубку, вы имеете в виду сбой, вы можете пропустить \0 в конце передаваемой строки. Из того, что я знаю, wxString(wxChar*) будет принимать строку с нулевым символом в конце.

...