我想在一个线程中监控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;
}
}
解决方案 »
- ActiveX怎么输出二进制流
- 请问封装成COM以后,如何告诉调用者数据在哪里?
- 郁闷那!在OnInitDialog()中起的线程中用postmessage()时,参数HWND用什么?
- 购买软件
- 明天交辞职信,请问现在辞职找工作好找吗?散分求祝福
- 简单的小问题,在线等待
- 那里有免费的mapinfo下载,包括注册码
- 菜鸟问题,请大家帮忙。
- 关于ListCtrl插入项目的菜鸟问题(SetItemText()和InsertItem())在线等候
- Foxmail的帐户密码忘记了怎么办,里面有好多VC资料的信件,请大家帮忙!!!
- ==> Https代理是什么回事?我通过Https代理建1个到外 server 的 tcp 长连接,我应该怎么连?
- 毕业2年了,户口在学校也放了2年,现正在办迁回手续,但不知那个报到证有什么用处?
int WSAAsyncSelect(
SOCKET s,
HWND hWnd,
unsigned int wMsg,
long lEvent
)将套接字和窗口消息关联起来,这种处理更方便。