读书人

OnReceive事件一直不触发服务端是用AP

发布时间: 2012-02-13 17:20:26 作者: rapoo

OnReceive事件一直不触发服务端是用API写的,客户端是用CSocket(Cascsocket)写的。
OnReceive事件一直不触发服务端是用API写的,客户端是用CSocket(Cascsocket)写的。
::OnReceive(int nErrorCode)
{
// With Visual C++ 2003, this patch is needed because for an unknown reason socket notifications are not send
OutputDebugString( "LineID==1 ");
VERIFY(AsyncSelect(FD_READ|FD_WRITE|FD_OOB|FD_ACCEPT| FD_CONNECT | FD_CLOSE));

CAsyncSocket::OnReceive(nErrorCode);
// AddSystemText( "Do Receive ");
//ASSERT(m_pClient != NULL);

if (m_pClient != NULL)
{
if (m_pClient-> ProcessPendingRead(nErrorCode))
{
CString strSocketAddress;
UINT unPort = 0;

// Restore to the default notification
if (GetSockName(strSocketAddress, unPort) != 0)
VERIFY(AsyncSelect());
}
}
}
这个事件一直不触发,急!

[解决办法]
可能是你一开始创建Socket的时候没写触发事件,真不行你就把
VERIFY(AsyncSelect(FD_READ|FD_WRITE|FD_OOB|FD_ACCEPT| FD_CONNECT | FD_CLOSE));
放到Connent语句执行成功的情况下的下面。
[解决办法]
那你把.\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\src\mfc\sockcore.cpp添加到项目文件中,在CAsyncSocket::AsyncSelect(long lEvent)这里设一个断点,看看到底执行过没有。如果那函数里面的WSAAsyncSelect已经执行过了还这样,那我也没辙了……

读书人网 >VC/MFC

热点推荐