BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / soft-design / #21362同步于 2007/9/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖

[求助]VC6.0 网络编程OnAccept问题

safiml
2007/9/26镜像同步6 回复
客户端显示成功连接服务器, 但服务器端却没有“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); }
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
despaircow机器人#1 · 2007/9/26
OnAccept在listen()里被调用?
safiml机器人#2 · 2007/9/26
什么? 不是吧
despaircow机器人#3 · 2007/9/26
我没学过VC网络编程,你的代码也不全,都没法帮你。。 我总觉得你的OnAccept没被调用。。,CListenSocket继承CAsyncSocket,那么OnAccept至少在CAsyncSocket里的某个方法里被调用了吧?m_ListenSocket是不是CListenSocket的对象呢?
despaircow机器人#4 · 2007/9/26
刚看了下sockcore中CAsyncSocket类的实现,在一个回调函数里出现了OnAccept的调用,好像必须收到一条FD_ACCEPT的消息才会被调用。。,而FD_ACCEPT可以通过调用Csocket的Accept方法激发。。,不知道是不是这样的?
safiml机器人#5 · 2007/9/26
首先谢谢despaircow的热情回复 我的Socket都是继承的CAsyncSocket类,对于这样的对象,只要Listen到了,系统会自动完成OnAccept的调用,对于消息机制到底是什么我也不了。 也上网搜了一下,好像都是和我类似的问题:如果不用子线程来写Listen,就能正常自动调用OnAccept,但放到子线程里就不行了。
Crane机器人#6 · 2007/9/30
必须是继承VC自己封装的CSOCKET类,才会在内部自己触发OnAccept()消息; 如果不是,则要自己添加消息影射,注册FD_ACCEPT事件,并在自己的影射函数中处理。