请看MSDN里面的解释: OnReceive Notifies a listening socket that there is data to be retrieved by calling Receive 也就是说只有调用了Receive后当有数据时才会回调OnReceive。 如果你用主线程不断调用Receive的话,主线程就会卡住。如果你的主线程还要做别的事情的话,最好就再开一个线程。 你可以先试试不断调用Receive,不行的话再用select试试。但都会阻塞当前线程。 请多参考MSDN
CBwChessView::Connect(void)
{
m_IsConnect = true;
MessageBox( _T("连接成功,可以开始游戏."));
}感觉这里 也是什么也没有做 ,怎么就连接上了 ?
case FD_ACCEPT: OnAccept() 的地方吧
你得在你的代码里面不断的调用CAsyncSocket::Receive,最好用一个线程不断的调用,这样当有数据的时候才会回调OnReceive,否则是不会回调OnReceive的。
建议你看看这篇文章:http://blog.csdn.net/wingsing2010/archive/2010/07/27/5767541.aspx
CBwChessView * pView = (CBwChessView*)AfxGetMainWnd();
pView->Receive();
CAsyncSocket::OnReceive(nErrorCode);
这是要做的事情 : 只不过 都没用调用它 ,当然就不做事了
请看MSDN里面的解释:
OnReceive
Notifies a listening socket that there is data to be retrieved by calling Receive
也就是说只有调用了Receive后当有数据时才会回调OnReceive。
如果你用主线程不断调用Receive的话,主线程就会卡住。如果你的主线程还要做别的事情的话,最好就再开一个线程。
你可以先试试不断调用Receive,不行的话再用select试试。但都会阻塞当前线程。
请多参考MSDN
m_connect.Receive(NULL,0);
}
else{
m_sock.Receive(NULL,0);
}鼠标左键响应中这样调用的 ;
问题很诡异 :
在任意一个程序中点鼠标左键 ,另一个程序会自动死掉 . 难道是线程的问题 . 但为什么是另一个程序死掉 .