返回信息流客户端显示成功连接服务器,
但服务器端却没有“Here”的提示框,应该没有触发OnAccept,请问是什么原因?
服务器端监听相关代码如下:
//MDlg.cpp
BOOL CMDlg::OnInitDialog()
{
……
m_tListen = (CListenThread*)AfxBeginThread(m_tListen->ListenLoop, (LPVOID)this);
……
}
//ListenThread.cpp
UINT CListenThread::ListenLoop(LPVOID pParam)
{
::AfxSocketInit();
m_ListenSocket.Create(LPORT, SOCK_STREAM, FD_ACCEPT|FD_CLOSE);
m_ListenSocket.Listen();
……
}
//ListenSocket.cpp
void CListenSocket::OnAccept(int nErrorCode)
{
AfxMessageBox("Here!");
……
CAsyncSocket::OnAccept(nErrorCode);
}
这是一条镜像帖。来源:北邮人论坛 / soft-design / #21362同步于 2007/9/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖
[求助]VC6.0 网络编程OnAccept问题
safiml
2007/9/26镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
我没学过VC网络编程,你的代码也不全,都没法帮你。。
我总觉得你的OnAccept没被调用。。,CListenSocket继承CAsyncSocket,那么OnAccept至少在CAsyncSocket里的某个方法里被调用了吧?m_ListenSocket是不是CListenSocket的对象呢?
刚看了下sockcore中CAsyncSocket类的实现,在一个回调函数里出现了OnAccept的调用,好像必须收到一条FD_ACCEPT的消息才会被调用。。,而FD_ACCEPT可以通过调用Csocket的Accept方法激发。。,不知道是不是这样的?
首先谢谢despaircow的热情回复
我的Socket都是继承的CAsyncSocket类,对于这样的对象,只要Listen到了,系统会自动完成OnAccept的调用,对于消息机制到底是什么我也不了。
也上网搜了一下,好像都是和我类似的问题:如果不用子线程来写Listen,就能正常自动调用OnAccept,但放到子线程里就不行了。
必须是继承VC自己封装的CSOCKET类,才会在内部自己触发OnAccept()消息;
如果不是,则要自己添加消息影射,注册FD_ACCEPT事件,并在自己的影射函数中处理。