UINT ClientThread(LPVOID pParam)
{
myStruct* pMyStruct=(myStruct*)pParam;
SOCKET sockClient=pMyStruct->Socket;
HWND hWnd=pMyStruct->hWnd;
int nRet;
timeval timeout={0,200};
fd_set readfds={1,sockClient}; char szBuf[2049];
int nRecv;
while(1)
{
nRet=::select(0, &readfds,NULL,NULL,&timeout);
if(nRet>0){
memset(szBuf,0,2049);
nRecv=recv(sockClient,szBuf,2049,0);
if((nRecv==0)||(nRecv==SOCKET_ERROR))
{
char szTip[]="接受数据失败!";
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip);
closesocket(sockClient);
return FALSE;
}
char szTip[]="接受到数据!";
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip);
IN_MSG_HEADER *pHead=(IN_MSG_HEADER*)szBuf;
if(pHead->cmd==MSG_CONNECT_REQ) //请求包
{
IN_REGISTER_REQ* pReq=(IN_REGISTER_REQ*)szBuf;
int nRet1=strncmp(pReq->user,"admin",sizeof("admin"));
int nRet2=strncmp(pReq->password,"admin",sizeof("admin"));
static unsigned int no=0;
if(nRet1==0 && nRet2==0)
{
IN_REGISTER_RESP resp;
resp.hdr.cmd=MSG_CONNECT_RESP;
resp.hdr.length=sizeof(IN_REGISTER_RESP);
resp.hdr.seq_no=no++;
resp.hdr.type=CMD_TYPE_XUNFEI;
resp.result=0; char szTip[]="用户名密码正确!";
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip); int nSend=send(sockClient,(char*)&resp,sizeof(resp),0);
if(nSend<sizeof(resp))
{
char szTip[]="发送回答数据失败!";
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip); closesocket(sockClient);
return FALSE;
} }
else
{
IN_REGISTER_RESP resp;
resp.hdr.cmd=MSG_CONNECT_RESP;
resp.hdr.length=sizeof(IN_REGISTER_RESP);
resp.hdr.seq_no=no++;
resp.hdr.type=CMD_TYPE_XUNFEI;
resp.result=2;
char szTip[]="发送回答用户名密码错误数据!";
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip); int nSend=send(sockClient,(char*)&resp,sizeof(resp),0);
if(nSend<sizeof(resp))
{
char szTip[]="发送回答用户名密码错误数据失败!";
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip); closesocket(sockClient);
return FALSE;
}
}
}
if(pHead->cmd==MSG_EVENT_NOTIFY)
{
char szTip[]="接受到报警数据报!";
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip); IN_EVENT_NOTIFY* pNotify=(IN_EVENT_NOTIFY*)szBuf;
int data=pNotify->data;
char description[256];
_snprintf(description,256,pNotify->description);
char syntax[256];
_snprintf(syntax,256,pNotify->syntax);
int type=pNotify->type;
int eventid=pNotify->event_id;
int eventtype=pNotify->evnet_type; char szDesc[600];
memset(szDesc,0,600);
char szData[4];
if(data)
sprintf(szData,"报警");
else
sprintf(szData,"恢复");
sprintf(szDesc,"联动规则:%s_事件源类型:开关量_开关量:%s_状态:报警事件_描述:%s",syntax,szData,description);
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szDesc);
}
}
/*
if(nRet==SOCKET_ERROR)
{
char* szTip=new char[64];
memset(szTip,0,64);
sprintf(szTip,"socketClient错误!");
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip);
closesocket(sockClient);
AfxEndThread(0,true);
return 0;
}
*/
}
return 0;
}
//LoadWinsock用来装载和初始化Winsock,绑定本地地址,创建监听socket,等候客户端连接
UINT LoadWinsock(LPVOID lpParam)
{
CXFServerDlg* pDlg=(CXFServerDlg*)lpParam;
CString strIP;
int nPort=8000;
HWND hWnd;
strIP=pDlg->m_strIP;
nPort=pDlg->m_nPort;
hWnd=pDlg->m_hWnd; sockServer=socket(AF_INET,SOCK_STREAM,0);
if(sockServer==INVALID_SOCKET){
char szTip[]="创建SOCKET失败!";
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip);
return 0;
}
SOCKADDR_IN addr;
addr.sin_family=AF_INET;
addr.sin_addr.S_un.S_addr=inet_addr((LPCSTR)strIP);
addr.sin_port=htons(nPort);
if(bind(sockServer,(SOCKADDR*)&addr,sizeof(SOCKADDR))==SOCKET_ERROR){
char szTip[]="SOCKET绑定失败!";
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip);
return 0;
}
if(listen(sockServer,5)==SOCKET_ERROR){
char szTip[]="SOCKET监听失败!";
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip);
return 0;
}
char szTip[]="开始监听!";
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip);
myStruct MyStruct;
while(1)
{
Sleep(2000);
SOCKADDR_IN addrClient;
int nSize=sizeof(addrClient);
SOCKET sockClient=accept(sockServer,(SOCKADDR*)&addrClient,&nSize);
if(INVALID_SOCKET==sockClient){
char szTip[]="接受SOCKET失败!";
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip);
break;
}
char szTip[]="开始接受socketClient";
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip);
MyStruct.Socket=sockClient;
MyStruct.hWnd=hWnd;
AfxBeginThread(ClientThread,&MyStruct);
Sleep(500);
}
closesocket(sockServer);
return 0;
}
{
myStruct* pMyStruct=(myStruct*)pParam;
SOCKET sockClient=pMyStruct->Socket;
HWND hWnd=pMyStruct->hWnd;
int nRet;
timeval timeout={0,200};
fd_set readfds={1,sockClient}; char szBuf[2049];
int nRecv;
while(1)
{
nRet=::select(0, &readfds,NULL,NULL,&timeout);
if(nRet>0){
memset(szBuf,0,2049);
nRecv=recv(sockClient,szBuf,2049,0);
if((nRecv==0)||(nRecv==SOCKET_ERROR))
{
char szTip[]="接受数据失败!";
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip);
closesocket(sockClient);
return FALSE;
}
char szTip[]="接受到数据!";
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip);
IN_MSG_HEADER *pHead=(IN_MSG_HEADER*)szBuf;
if(pHead->cmd==MSG_CONNECT_REQ) //请求包
{
IN_REGISTER_REQ* pReq=(IN_REGISTER_REQ*)szBuf;
int nRet1=strncmp(pReq->user,"admin",sizeof("admin"));
int nRet2=strncmp(pReq->password,"admin",sizeof("admin"));
static unsigned int no=0;
if(nRet1==0 && nRet2==0)
{
IN_REGISTER_RESP resp;
resp.hdr.cmd=MSG_CONNECT_RESP;
resp.hdr.length=sizeof(IN_REGISTER_RESP);
resp.hdr.seq_no=no++;
resp.hdr.type=CMD_TYPE_XUNFEI;
resp.result=0; char szTip[]="用户名密码正确!";
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip); int nSend=send(sockClient,(char*)&resp,sizeof(resp),0);
if(nSend<sizeof(resp))
{
char szTip[]="发送回答数据失败!";
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip); closesocket(sockClient);
return FALSE;
} }
else
{
IN_REGISTER_RESP resp;
resp.hdr.cmd=MSG_CONNECT_RESP;
resp.hdr.length=sizeof(IN_REGISTER_RESP);
resp.hdr.seq_no=no++;
resp.hdr.type=CMD_TYPE_XUNFEI;
resp.result=2;
char szTip[]="发送回答用户名密码错误数据!";
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip); int nSend=send(sockClient,(char*)&resp,sizeof(resp),0);
if(nSend<sizeof(resp))
{
char szTip[]="发送回答用户名密码错误数据失败!";
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip); closesocket(sockClient);
return FALSE;
}
}
}
if(pHead->cmd==MSG_EVENT_NOTIFY)
{
char szTip[]="接受到报警数据报!";
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip); IN_EVENT_NOTIFY* pNotify=(IN_EVENT_NOTIFY*)szBuf;
int data=pNotify->data;
char description[256];
_snprintf(description,256,pNotify->description);
char syntax[256];
_snprintf(syntax,256,pNotify->syntax);
int type=pNotify->type;
int eventid=pNotify->event_id;
int eventtype=pNotify->evnet_type; char szDesc[600];
memset(szDesc,0,600);
char szData[4];
if(data)
sprintf(szData,"报警");
else
sprintf(szData,"恢复");
sprintf(szDesc,"联动规则:%s_事件源类型:开关量_开关量:%s_状态:报警事件_描述:%s",syntax,szData,description);
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szDesc);
}
}
/*
if(nRet==SOCKET_ERROR)
{
char* szTip=new char[64];
memset(szTip,0,64);
sprintf(szTip,"socketClient错误!");
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip);
closesocket(sockClient);
AfxEndThread(0,true);
return 0;
}
*/
}
return 0;
}
//LoadWinsock用来装载和初始化Winsock,绑定本地地址,创建监听socket,等候客户端连接
UINT LoadWinsock(LPVOID lpParam)
{
CXFServerDlg* pDlg=(CXFServerDlg*)lpParam;
CString strIP;
int nPort=8000;
HWND hWnd;
strIP=pDlg->m_strIP;
nPort=pDlg->m_nPort;
hWnd=pDlg->m_hWnd; sockServer=socket(AF_INET,SOCK_STREAM,0);
if(sockServer==INVALID_SOCKET){
char szTip[]="创建SOCKET失败!";
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip);
return 0;
}
SOCKADDR_IN addr;
addr.sin_family=AF_INET;
addr.sin_addr.S_un.S_addr=inet_addr((LPCSTR)strIP);
addr.sin_port=htons(nPort);
if(bind(sockServer,(SOCKADDR*)&addr,sizeof(SOCKADDR))==SOCKET_ERROR){
char szTip[]="SOCKET绑定失败!";
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip);
return 0;
}
if(listen(sockServer,5)==SOCKET_ERROR){
char szTip[]="SOCKET监听失败!";
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip);
return 0;
}
char szTip[]="开始监听!";
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip);
myStruct MyStruct;
while(1)
{
Sleep(2000);
SOCKADDR_IN addrClient;
int nSize=sizeof(addrClient);
SOCKET sockClient=accept(sockServer,(SOCKADDR*)&addrClient,&nSize);
if(INVALID_SOCKET==sockClient){
char szTip[]="接受SOCKET失败!";
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip);
break;
}
char szTip[]="开始接受socketClient";
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip);
MyStruct.Socket=sockClient;
MyStruct.hWnd=hWnd;
AfxBeginThread(ClientThread,&MyStruct);
Sleep(500);
}
closesocket(sockServer);
return 0;
}
解决方案 »
- 用GLUT库编写的程序能去掉控制台窗口吗
- VS2003中,关于string类型的使用问题??????
- [文章] 算法时间复杂度测量
- 请教怎样才能得到CTRL和回车的字符,在线等~~~~~
- 如何让多个摄像头同时工作?
- 一大早就来问个问题
- 请各位高手帮我解决这个问题,我从网上下栽了一个程序,但不能实现其功能,虽看似容易,还真不容易,请看!100相送
- 当列表框中内容很多时,如何排序?(内容为文件信息)
- putcollect出错
- MFC 获取网页中标签属性的值
- 报告不认识ImmGetIMEFileName函数?
- 求CFtpConnection::GetFile的例子,最好简单一些。第一个回答出来者给分!!谢谢
有时候出现cpu占用99%, 你的 ClientThread 里面的while 加上sleep试试
{
myStruct* pMyStruct=(myStruct*)pParam;
SOCKET sockClient=pMyStruct->Socket;
HWND hWnd=pMyStruct->hWnd;
int nRet;
timeval timeout={0,200};
fd_set readfds={1,sockClient}; char szBuf[2049];
int nRecv;
while(1)
{
nRet=::select(0, &readfds,NULL,NULL,&timeout);
if(nRet>0){
memset(szBuf,0,2049);
nRecv=recv(sockClient,szBuf,2049,0);
if((nRecv==0)||(nRecv==SOCKET_ERROR))
{
char szTip[]="接受数据失败!";
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip);
closesocket(sockClient);
return FALSE;
}
char szTip[]="接受到数据!";
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip);
IN_MSG_HEADER *pHead=(IN_MSG_HEADER*)szBuf;
if(pHead->cmd==MSG_CONNECT_REQ) //请求包
{
IN_REGISTER_REQ* pReq=(IN_REGISTER_REQ*)szBuf;
int nRet1=strncmp(pReq->user,"admin",sizeof("admin"));
int nRet2=strncmp(pReq->password,"admin",sizeof("admin"));
static unsigned int no=0;
if(nRet1==0 && nRet2==0)
{
IN_REGISTER_RESP resp;
resp.hdr.cmd=MSG_CONNECT_RESP;
resp.hdr.length=sizeof(IN_REGISTER_RESP);
resp.hdr.seq_no=no++;
resp.hdr.type=CMD_TYPE_XUNFEI;
resp.result=0; char szTip[]="用户名密码正确!";
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip); int nSend=send(sockClient,(char*)&resp,sizeof(resp),0);
if(nSend<sizeof(resp))
{
char szTip[]="发送回答数据失败!";
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip); closesocket(sockClient);
return FALSE;
} }
else
{
IN_REGISTER_RESP resp;
resp.hdr.cmd=MSG_CONNECT_RESP;
resp.hdr.length=sizeof(IN_REGISTER_RESP);
resp.hdr.seq_no=no++;
resp.hdr.type=CMD_TYPE_XUNFEI;
resp.result=2;
char szTip[]="发送回答用户名密码错误数据!";
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip); int nSend=send(sockClient,(char*)&resp,sizeof(resp),0);
if(nSend<sizeof(resp))
{
char szTip[]="发送回答用户名密码错误数据失败!";
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip); closesocket(sockClient);
return FALSE;
}
}
}
if(pHead->cmd==MSG_EVENT_NOTIFY)
{
char szTip[]="接受到报警数据报!";
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip); IN_EVENT_NOTIFY* pNotify=(IN_EVENT_NOTIFY*)szBuf;
int data=pNotify->data;
char description[256];
_snprintf(description,256,pNotify->description);
char syntax[256];
_snprintf(syntax,256,pNotify->syntax);
int type=pNotify->type;
int eventid=pNotify->event_id;
int eventtype=pNotify->evnet_type; char szDesc[600];
memset(szDesc,0,600);
char szData[4];
if(data)
sprintf(szData,"报警");
else
sprintf(szData,"恢复");
sprintf(szDesc,"联动规则:%s_事件源类型:开关量_开关量:%s_状态:报警事件_描述:%s",syntax,szData,description);
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szDesc);
}
}
/*
if(nRet==SOCKET_ERROR)
{
char* szTip=new char[64];
memset(szTip,0,64);
sprintf(szTip,"socketClient错误!");
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip);
closesocket(sockClient);
AfxEndThread(0,true);
return 0;
}
*/
}
return 0;
}
等价于while( select(...)>0) memset(....);
问题太多了
还有这个POST和局部变量的使用,也太危险了吧
{
myStruct* pMyStruct=(myStruct*)pParam;
SOCKET sockClient=pMyStruct->Socket;
HWND hWnd=pMyStruct->hWnd;
int nRet;
timeval timeout={0,200};
fd_set readfds={1,sockClient};
char szBuf[2049];
int nRecv;
while(1)
{
nRet=::select(0, &readfds,NULL,NULL,&timeout);
if(nRet>0){
memset(szBuf,0,2049);
nRecv=recv(sockClient,szBuf,2049,0);
char* szTip=new char[64];
memset(szTip,0,64);
sprintf(szTip,"接受到数据!");
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip);
if(nRecv<=0)
{
break;
}
IN_MSG_HEADER *pHead=(IN_MSG_HEADER*)szBuf;
if(pHead->cmd==MSG_CONNECT_REQ) //请求包
{
IN_REGISTER_REQ* pReq=(IN_REGISTER_REQ*)szBuf;
int nRet1=strncmp(pReq->user,"admin",sizeof("admin"));
int nRet2=strncmp(pReq->password,"admin",sizeof("admin"));
static unsigned int no=0;
if(nRet1==0 && nRet2==0)
{
IN_REGISTER_RESP resp;
resp.hdr.cmd=MSG_CONNECT_RESP;
resp.hdr.length=sizeof(IN_REGISTER_RESP);
resp.hdr.seq_no=no++;
resp.hdr.type=CMD_TYPE_XUNFEI;
resp.result=0;
char* szTip=new char[64];
memset(szTip,0,64);
sprintf(szTip,"用户名密码正确!");
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip);
int nSend=send(sockClient,(char*)&resp,sizeof(resp),0);
if(nSend<sizeof(resp))
{
char* szTip=new char[64];
memset(szTip,0,64);
sprintf(szTip,"发送回答数据失败!");
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip);
break;
}
}
else{
IN_REGISTER_RESP resp;
resp.hdr.cmd=MSG_CONNECT_RESP;
resp.hdr.length=sizeof(IN_REGISTER_RESP);
resp.hdr.seq_no=no++;
resp.hdr.type=CMD_TYPE_XUNFEI;
resp.result=2;
char* szTip=new char[64];
memset(szTip,0,64);
sprintf(szTip,"发送回答用户名密码错误数据!");
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip);
int nSend=send(sockClient,(char*)&resp,sizeof(resp),0);
if(nSend<sizeof(resp))
{
char* szTip=new char[64];
memset(szTip,0,64);
sprintf(szTip,"发送回答用户名密码错误数据失败!");
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip);
break;
}
break;
}
}
if(pHead->cmd==MSG_EVENT_NOTIFY)
{
char* szTip=new char[64];
memset(szTip,0,64);
sprintf(szTip,"接受到报警数据报!");
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip);
IN_EVENT_NOTIFY* pNotify=(IN_EVENT_NOTIFY*)szBuf;
int data=pNotify->data;
char description[256];
_snprintf(description,256,pNotify->description);
char syntax[256];
_snprintf(syntax,256,pNotify->syntax);
int type=pNotify->type;
int eventid=pNotify->event_id;
int eventtype=pNotify->evnet_type;
char* szDesc=new char[600];
memset(szDesc,0,600);
char szData[4];
if(data)
sprintf(szData,"报警");
else
sprintf(szData,"恢复");
sprintf(szDesc,"联动规则:%s_事件源类型:开关量_开关量:%s_状态:报警事件_描述:%s",syntax,szData,description);
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szDesc);
}
}
/*
if(nRet==SOCKET_ERROR)
{
char* szTip=new char[64];
memset(szTip,0,64);
sprintf(szTip,"socketClient错误!");
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szTip);
break;
}
*/
}
closesocket(sockClient);
return 0;
}//LoadWinsock用来装载和初始化Winsock,绑定本地地址,创建监听socket,等候客户端连接
UINT LoadWinsock(LPVOID lpParam)
{
CXFServerDlg* pDlg=(CXFServerDlg*)lpParam;
CString strIP;
int nPort=8000;
HWND hWnd;
strIP=pDlg->m_strIP;
nPort=pDlg->m_nPort;
hWnd=pDlg->m_hWnd; sockServer=socket(AF_INET,SOCK_STREAM,0);
if(sockServer==INVALID_SOCKET){
char *szLog=new char[256];
memset(szLog,0,256);
strcpy(szLog,"创建SOCKET失败!");
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szLog);
return 0;
}
SOCKADDR_IN addr;
addr.sin_family=AF_INET;
addr.sin_addr.S_un.S_addr=inet_addr((LPCSTR)strIP);
addr.sin_port=htons(nPort);
if(bind(sockServer,(SOCKADDR*)&addr,sizeof(SOCKADDR))==SOCKET_ERROR){
char *szLog=new char[256];
memset(szLog,0,256);
strcpy(szLog,"SOCKET绑定失败!");
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szLog);
return 0;
}
if(listen(sockServer,5)==SOCKET_ERROR){
char *szLog=new char[256];
memset(szLog,0,256);
strcpy(szLog,"SOCKET监听失败!");
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szLog);
return 0;
}
char *szLog=new char[256];
memset(szLog,0,256);
strcpy(szLog,"开始监听!");
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szLog);
myStruct MyStruct;
while(1)
{
Sleep(2000);
SOCKADDR_IN addrClient;
int nSize=sizeof(addrClient);
SOCKET sockClient=accept(sockServer,(SOCKADDR*)&addrClient,&nSize);
if(INVALID_SOCKET==sockClient){
char *szLog=new char[256];
memset(szLog,0,256);
strcpy(szLog,"接受SOCKET失败!");
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szLog);
closesocket(sockServer);
return 0;
}
char* szLog=new char[256];
memset(szLog,0,256);
strcpy(szLog,"开始接受socketClient");
::PostMessage(hWnd,WM_ADDLOG,0,(LPARAM)szLog);
MyStruct.Socket=sockClient;
MyStruct.hWnd=hWnd;
AfxBeginThread(ClientThread,&MyStruct);
}
closesocket(sockServer);
return 0;
}void CXFServerDlg::OnBtnStart()
{
// TODO: Add your control notification handler code here
GetDlgItem(IDC_BTNSTART)->EnableWindow(FALSE);
GetDlgItem(IDC_BTNSTOP)->EnableWindow(TRUE);
UpdateData();
AfxBeginThread(LoadWinsock,this);
}LRESULT CXFServerDlg::OnAddLog(WPARAM wParam,LPARAM lParam)
{
int nLine=m_list.GetCount();
if(nLine>20)
{
for (int i=0;i<nLine;i++)
{
m_list.DeleteString( i );
}
}
char* szLog;
szLog=(LPTSTR)lParam;
m_list.AddString(szLog);
delete[] szLog;
return 0;
}