#define CLI_MESSAGE WM_USER+101void CClient::ClientInit()
{
if(WSAAsyncSelect(m_hSocket,m_hWnd,CLI_MESSAGE,FD_READ|FD_WRITE|FD_CLOSE|FD_CONNECT)>0)
AfxMessageBox("error in select");
}LRESULT CChatDlg::OnClientMessage(WPARAM wParam,LPARAM lParam)
{
……
switch(lParam)
{
case FD_CONNECT:
……;
return 0;
case FD_READ:
……;
return 0;
case FD_WRITE:
return 0;
case FD_CLOSE:
return 0;
default:
output=(CEdit*)GetDlgItem(IDC_SHOWTEXT);
output->SetWindowText("an network error has occured,the connection is dropped");
closesocket(m_client.m_hSocket);
m_bInit=false;
return 0;
}
}在ClientInit()里,并没有弹出AfxMessageBox("error in select");这说明CLI_MESSAGE是FD_READ|FD_WRITE|FD_CLOSE|FD_CONNECT的一种,但是在OnClientMessage函数中switch总是跳转到default里?
我把lParam转换成CString用AfxMessageBox弹出,发现lParam并没有值。谢谢各位!
{
if(WSAAsyncSelect(m_hSocket,m_hWnd,CLI_MESSAGE,FD_READ|FD_WRITE|FD_CLOSE|FD_CONNECT)>0)
AfxMessageBox("error in select");
}LRESULT CChatDlg::OnClientMessage(WPARAM wParam,LPARAM lParam)
{
……
switch(lParam)
{
case FD_CONNECT:
……;
return 0;
case FD_READ:
……;
return 0;
case FD_WRITE:
return 0;
case FD_CLOSE:
return 0;
default:
output=(CEdit*)GetDlgItem(IDC_SHOWTEXT);
output->SetWindowText("an network error has occured,the connection is dropped");
closesocket(m_client.m_hSocket);
m_bInit=false;
return 0;
}
}在ClientInit()里,并没有弹出AfxMessageBox("error in select");这说明CLI_MESSAGE是FD_READ|FD_WRITE|FD_CLOSE|FD_CONNECT的一种,但是在OnClientMessage函数中switch总是跳转到default里?
我把lParam转换成CString用AfxMessageBox弹出,发现lParam并没有值。谢谢各位!
解决方案 »
- mschart 折线图显示问题,1.X轴坐标当数值大时就变成竖着显示(就看不清了)2.Y轴数据自动标识,但是当数据多就叠加
- 我对C++宏定义的定义语法和有什么作用不是很懂
- 同时打开两个vs2010,一VC,一VB 在VB中调试VC中生成的ActiveX,在取消引用后得等一会儿才能在VC重新编译ActiveX控件
- 请问我这个opengl错误是什么原因
- VC中,导入工程里的数据能编译到程序里么?如能怎么读取?
- SetDocumentHTML 路径丢失
- VC中使用ADO如何调用ACCESS数据库中“查询”对象?
- 求PC-LINT安装程序(要多少分都行)。谢谢
- "0x004260a8"指令引用的"0x0000000c"内存。该内存不能为"read"。大家来分析一下这个Bug是怎样造成的
- WlanConnect连接中文wifi不成功
- 关于棋牌类游戏
- SDI在关闭时如何保存数据
If the WSAAsyncSelect function succeeds, the return value is zero, provided that the application's declaration of interest in the network event set was successful. Otherwise, the value SOCKET_ERROR is returned, and a specific error number can be retrieved by calling WSAGetLastError成功返回0 否则返回 SOCKET_ERROR 就是-1 你确定你成功了? 你的AfxMessageBox("error in select")永远不会弹出来
{
if(SOCKET_ERROR == WSAAsyncSelect(m_hSocket,m_hWnd,CLI_MESSAGE,FD_READ|FD_WRITE|FD_CLOSE|FD_CONNECT))
{
AfxMessageBox("error in select");
}
}LRESULT CChatDlg::OnClientMessage(WPARAM wParam,LPARAM lParam)
{
SOCKET s = wParam;
if(WSAGETSELECTERROR(lParam))
{
closesocket(s);
return 0;
}
switch(WSAGETSELECTEVENT(lParam))
{
case FD_CONNECT:
……;
return 0;
case FD_READ:
……;
return 0;
case FD_WRITE:
return 0;
case FD_CLOSE:
return 0;
default:
output=(CEdit*)GetDlgItem(IDC_SHOWTEXT);
output->SetWindowText("an network error has occured,the connection is dropped");
closesocket(m_client.m_hSocket);
m_bInit=false;
return 0;
}
}
afx_msg LRESULT OnServerMessage(WPARAM wParam,LPARAM lParam);//CChatDlg.hBEGIN_MESSAGE_MAP(CChatDlg,CDialog)
ON_MESSAGE(SER_MESSAGE,OnServerMessage)
END_MESSAGE_MAP() //CChatDlg.cppvoid CServer::ServerInit()
{
if(SOCKET_ERROR==WSAAsyncSelect(m_hSocket,m_hWnd,SER_MESSAGE,FD_CLOSE|FD_READ|FD_WRITE|FD_ACCEPT))
AfxMessageBox("socketerror");
}LRESULT CChatDlg::OnServerMessage(WPARAM wParam,LPARAM lParam)
{
AfxMessageBox("OnServerMessage");
return 0;
}在这段代码中ServerInit()函数执行了,并且WSAAsyncSelect()的返回值为0,但是相应的OnServerMesage()函数却没有执行,这是为什么?
以上相同设置的ClientInit()和OnClientMessage()函数却能执行。再次感谢。