Приложение MFC, которое использует сокет, кажется странным
Вот функция приема сообщений серверного приложения:
void CServerDlg::ReceiveData(CSocket & socket) { char bufferdata[BUFFERSIZE]; int len = socket.Receive(bufferdata,BUFFERSIZE); if (len != -1) { bufferdata[len] = '\0'; POSITION pos = m_socketlist.GetHeadPosition(); std::cout << len ; std::cout << "got"; std::cout << bufferdata << '\n'; while (pos != NULL) { CClientSocket* socket = (CClientSocket*)m_socketlist.GetNext(pos); if (socket != NULL) { socket->Send(bufferdata, len); } } } }
Я просто хочу напечатать текст, который он получает из клиентского приложения в окне консоли, но он не показывает текст, а просто правильный номер LEN и "got".
Но что меня смущает, так это то, что клиентское приложение получает текст правильно!!Как это странно!!!!
Что я уже пробовал:
Я пытался поставить
[std:: cout << len ;
std:: cout << " got";
std:: cout < & lt; bufferdata << '\n';]
под while {...}, чтобы избежать случая, когда он не получил текст полностью, но проблема все еще существует. Пожалуйста, скажите мне, как я могу это сделать?
[no name]
Что находится в bufferdata? Если вы не знаете, то пришло время научиться использовать отладчик.
Sar Kerson
Я только что попробовал. То, что находится в bufferdata, на самом деле совпадает с тем, что он печатает в окне консоли. Но почему он может правильно передать текст?
Richard MacCutchan
Каково точное содержимое буфера? Является ли первый байт допустимым символом?
Sar Kerson
В моем примере я отправил "QWE "из клиентского приложения, но серверное приложение напечатало" Q " в окне консоли. Однако он передает "QWE" клиентскому приложению. Я так запуталась. Что ж, я попробую еще раз.
Richard MacCutchan
Похоже, что вы передаете символы Юникода, поэтому второй байт данных является нулевым символом. Когда вы вызываете cout, он пытается напечатать символы как ASCII и останавливается на первом null. Просмотр данных с помощью вашего отладчика немедленно подтвердит это.
Sar Kerson
Да, вы правы!!!!! Наконец я меняю "char bufferdata []" на "wchar_t bufferdata []", и это работает! Большое вам спасибо за совет.