CAsyncSocket::OnReceive这个事件是自己调用Recv时候触发还是客户调用Send的时候触发?我这里没有这个消息?

cen_jin_long 2008-04-06 09:28:11
CAsyncSocket::OnReceive这个事件是自己调用Recv时候触发还是客户调用Send的时候触发?我这里没有这个消息?
...全文
245 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
cen_jin_long 2008-04-22
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 yysbest 的回复:]
我来解释一下吧,呵呵。

这里总共牵扯到3个Socket,
在server端有两个,分别为listenSocket, acceptSocket
在client端有一个,为connectSocket

过程如下:
1. listenSocket负责create()和listen(),当client端的connectSocket向server端Connect()时,listenSocket会收到OnAccept()通知。
2. 在listenSocket的OnAccept()函数中,listenSocket.Accept(&acceptSocket),会新开辟一个新的socket(也就是acceptSocket…
[/Quote]

原来是这样,大概知道。会建立新的接受的Socket、
雨中的月儿 2008-04-11
  • 打赏
  • 举报
回复
我来解释一下吧,呵呵。

这里总共牵扯到3个Socket,
在server端有两个,分别为listenSocket, acceptSocket
在client端有一个,为connectSocket

过程如下:
1. listenSocket负责create()和listen(),当client端的connectSocket向server端Connect()时,listenSocket会收到OnAccept()通知。
2. 在listenSocket的OnAccept()函数中,listenSocket.Accept(&acceptSocket),会新开辟一个新的socket(也就是acceptSocket)专门负责与client端的connectSocket进行通讯,而listenSocket不再与connectSocket有任何关系了。
3. 当connectSocket调用Send()函数时,acceptSocket会调用OnReceive(),
4. 反过来说,acceptSocket调用Send()时,connectSocket也会调用OnReceive()

大概过程如上。不知道你能否明白?
jourbin 2008-04-09
  • 打赏
  • 举报
回复
把你问问题的时间拿来自己测试,早就搞明白了,而且学到的东西比别人给你答案多的多
cen_jin_long 2008-04-09
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 Mackz 的回复:]
10楼的说得很清楚了,你Accept这个函数里的参数就是接收数据用的Socket连接,才会有OnReceive事件;而监听的Socket只能收到OnAccept事件。
[/Quote]

那么OnSend是Accept以后的还是Listen以后的?
Eleven 2008-04-08
  • 打赏
  • 举报
回复
Up
菜牛 2008-04-08
  • 打赏
  • 举报
回复
10楼的说得很清楚了,你Accept这个函数里的参数就是接收数据用的Socket连接,才会有OnReceive事件;而监听的Socket只能收到OnAccept事件。
scq2099yt 2008-04-07
  • 打赏
  • 举报
回复
up
jourbin 2008-04-07
  • 打赏
  • 举报
回复
有OnAccept事件,说明你是服务器端吧

服务器端一般是一个监听socket,该socket上会收到FD_ACCEPT
在OnAccept里面,用新的CAsyncSocket来accept
这个accept的CAsyncSocket才是用来收发数据的

所以一般是accept后的CAsyncSocket上才会触发OnReceive事件
而监听的socket只有OnAccept
cen_jin_long 2008-04-07
  • 打赏
  • 举报
回复
CAsyncSocket

这个到底怎么样,事件得一个,OnAccept之后就没有了。客户又有发数据的呀,而且又成功发出。但接收不到的?
cen_jin_long 2008-04-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 jourbin 的回复:]
有OnAccept事件,说明你是服务器端吧

服务器端一般是一个监听socket,该socket上会收到FD_ACCEPT
在OnAccept里面,用新的CAsyncSocket来accept
这个accept的CAsyncSocket才是用来收发数据的

所以一般是accept后的CAsyncSocket上才会触发OnReceive事件
而监听的socket只有OnAccept
[/Quote]


Accept(pDlg->m_User[m_nCount]);

我在OnAccept里写了这语句,然后应该怎么样?

还是没有OnReceive事件。


cen_jin_long 2008-04-07
  • 打赏
  • 举报
回复
	pDlg->MessageBox(TEXT("ACCEPT"));

Accept(pDlg->m_User[m_nCount]);

TCHAR Buffer[100] = {0};
pDlg->m_User[m_nCount].Receive(Buffer, 100);
pDlg->MessageBox(Buffer);

CString strCount;
strCount.Format(TEXT("%d"), m_nCount);
pDlg->MessageBox(strCount);


但OnRecv没有的啊?
cen_jin_long 2008-04-07
  • 打赏
  • 举报
回复
数据完全可以接收,但没有事件。

在OnAccept的时候,我用新Accept带来的套接字可以接收到客户发过来的数据。
  • 打赏
  • 举报
回复
那客户端发送数据了没有?
cen_jin_long 2008-04-06
  • 打赏
  • 举报
回复
真的什么消息也没有,除了OnAccept之外,其他全部没有。
cen_jin_long 2008-04-06
  • 打赏
  • 举报
回复
可以收到OnAccept事件。
cen_jin_long 2008-04-06
  • 打赏
  • 举报
回复
CAsyncSocket::AsyncSelect
BOOL AsyncSelect( long lEvent = FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE );

创建完还用这调用这个函数。但是客户发消息来,什么消息也没有。
cen_jin_long 2008-04-06
  • 打赏
  • 举报
回复
我创建的时候已经用
BOOL Create( UINT nSocketPort = 0, int nSocketType = SOCK_STREAM, long lEvent = FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE, LPCTSTR lpszSocketAddress = NULL );

这个创建了。
  • 打赏
  • 举报
回复
你注册了FD_READ事件没有 ?要是注册的话系统会回调的

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧