我想在一个线程中监控UDP端口,用于接收另一个程序发出的远程命令,当接到相应的指令是就发送消息WM_MYMSG给窗口,窗口执行相应的操作。但是我就无法收到那个消息,请各位高手指点一二,不胜感激。
监控UDP端口的线程:
UINT _UDPThread(LPVOID lparam) //UDP接受信息线程开始
{ CCSSAppTestDlg *pDlg=(CCSSAppTestDlg *)lparam;
CSocket sockSrvrUdp;
UINT LPort,LEerror;
LPort=pDlg->m_localport;
int ret=0;
ret=sockSrvrUdp.Create(LPort,SOCK_DGRAM);
if(ret==0)
pDlg->m_lbEvents.AddString("SOCKET_ERROR");
LEerror=GetLastError();
char buff[100]={0};
CString ipStr;
CString msg;
UINT port;
for(;;)
{
ret=sockSrvrUdp.ReceiveFrom(buff,100,ipStr,port);//IP和port均为返回值
if(buff[0]=='D') return 0;
if(ret==SOCKET_ERROR)
{
pDlg->m_lbEvents.AddString("SOCKET_ERROR");
break;
}
msg.Format(buff);
CString Strtemp;
if (msg符合条件)
{
PostMessage((HWND)lparam,WM_MYMSG,0,0);
}
}
收到自定义消息时做相应的处理:
LRESULT CCSSAppTestDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
switch(message)
{
case WM_MYMSG:
m_lbEvents.AddString("收到自定义的消息");
break;
}
}
监控UDP端口的线程:
UINT _UDPThread(LPVOID lparam) //UDP接受信息线程开始
{ CCSSAppTestDlg *pDlg=(CCSSAppTestDlg *)lparam;
CSocket sockSrvrUdp;
UINT LPort,LEerror;
LPort=pDlg->m_localport;
int ret=0;
ret=sockSrvrUdp.Create(LPort,SOCK_DGRAM);
if(ret==0)
pDlg->m_lbEvents.AddString("SOCKET_ERROR");
LEerror=GetLastError();
char buff[100]={0};
CString ipStr;
CString msg;
UINT port;
for(;;)
{
ret=sockSrvrUdp.ReceiveFrom(buff,100,ipStr,port);//IP和port均为返回值
if(buff[0]=='D') return 0;
if(ret==SOCKET_ERROR)
{
pDlg->m_lbEvents.AddString("SOCKET_ERROR");
break;
}
msg.Format(buff);
CString Strtemp;
if (msg符合条件)
{
PostMessage((HWND)lparam,WM_MYMSG,0,0);
}
}
收到自定义消息时做相应的处理:
LRESULT CCSSAppTestDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
switch(message)
{
case WM_MYMSG:
m_lbEvents.AddString("收到自定义的消息");
break;
}
}
解决方案 »
- OpenGL gluNurbsSurface函数的权因子问题
- TCITEM和TC_ITEM的区别?
- 如何让着急的程序最先拦截(关机,注销,重启)的消息
- 请问怎么保存CStatic 对象??
- 请问用vb开发的控件JanChart 能否在mfc中使用
- 问题:如何把api截取的图象保存为bmp文件? // win32程序
- 如何实现可以自动放缩显示Gif图片的控件
- 如何将ASCII字符转换为16位的字符格式
- DirectX Show的 VC++问题
- 为什么用ODBC能连ORACLE和ACESS,不能连SQL SERVER
- ==> Https代理是什么回事?我通过Https代理建1个到外 server 的 tcp 长连接,我应该怎么连?
- 毕业2年了,户口在学校也放了2年,现正在办迁回手续,但不知那个报到证有什么用处?
int WSAAsyncSelect(
SOCKET s,
HWND hWnd,
unsigned int wMsg,
long lEvent
)将套接字和窗口消息关联起来,这种处理更方便。