Я пытаюсь написать рабочую программу, которая принимает данные из сокета UDP и отображает ее в поле управления редактированием при получении данных (Мое воздействие на C++ также составляет около недели : P только сделал встроенный код C раньше). У меня есть рабочая программа, которая может отправлять и выводить данные нажатием кнопки, но я хочу что-то, что может сделать это в режиме реального времени. Цель состоит в том, чтобы масштабировать это в большую программу GUI, которая может отправлять управляющие данные на оборудование и получать от них ответы.Простой UDP-сокет в VC++ MFC
я столкнулся с различными проблемами, включая:
- Программа просто не выполняет свою
OnReceive
функции (производной отCAsyncSocket
) - Получения функции
OnReceive
для запуска в отдельном потоке, так что он может еще запускается после того, как нажата кнопка отправки пакета управления клиенту, а затем ожидает ответа в цикле while - Невозможно выводить данные в поле редактирования (с использованием как
CEdit
a йCString
) ReplaceSel
ошибка о том, что типchar
несовместима сLPCTSTR
Мой код основан на this codeproject.com tutorial, будучи почти точно, что я хочу, но я получаю ошибку в 4.
EDIT: ошибка в 4. исчезает, когда я меняю ее на TCHAR
, но затем выводит случайные китайские символы. Учебник codeproject.com выводит правильные символы независимо от char
или TCHAR
. Когда отлаженный мой код имеет тип wchar_t
, вместо этого введите char
, как и другой код.
В рабочей программе echoBuffer[0]
характера отправки и отображается был 1
UINT ReceiveData(LPVOID pParam)
{
CTesterDlg *dlg = (CTesterDlg*)pParam;
AfxSocketInit(NULL);
CSocket echoServer;
// Create socket for sending/receiving datagrams
if (echoServer.Create(12345, SOCK_DGRAM, NULL) == 0)
{
AfxMessageBox(_T("Create() failed"));
}
for (;;)
{ // Run forever
// Client address
SOCKADDR_IN echoClntAddr;
// Set the size of the in-out parameter
int clntAddrLen = sizeof(echoClntAddr);
// Buffer for echo string
char echoBuffer[ECHOMAX];
// Block until receive message from a client
int recvMsgSize = echoServer.ReceiveFrom(echoBuffer, ECHOMAX, (SOCKADDR*)&echoClntAddr, &clntAddrLen, 0);
if (recvMsgSize < 0)
{
AfxMessageBox(_T("RecvFrom() failed"));
}
echoBuffer[recvMsgSize] = '\0';
dlg->m_edit.ReplaceSel(echoBuffer);
dlg->m_edit.ReplaceSel(_T("\r\n"));
}
}
Очевидно, что вы делаете это неправильно. Мы не можем вам помочь, если вы не покажете код. Предоставьте [mcve], чтобы сделать этот вопрос полезным (см. Также [ask]). – IInspectable
@Inpectable Я добавил код и отладочное изображение. – C3PO
* «ошибка в 4. исчезает, когда я меняю ее на« TCHAR », но затем выводит случайные китайские символы». * Пожалуйста, прочитайте [работает со строками] (https://msdn.microsoft.com/en-us/ библиотека/windows/desktop/ff381407.aspx) и [Абсолютный минимум Каждый разработчик программного обеспечения абсолютно уверен, должен знать об Unicode и наборах символов (никаких оправданий!)] (http://www.joelonsoftware.com/articles/Unicode.html). – IInspectable