社区
网络编程
帖子详情
OnReceive为什么不被调用?
g_yxh
2005-10-08 09:44:37
CAsyncSocket的OnReceive函数执行是不是一定要个窗口对象来触发?如果是Win32 Console Application的工程,该怎么让它触发呢?
...全文
535
18
打赏
收藏
OnReceive为什么不被调用?
CAsyncSocket的OnReceive函数执行是不是一定要个窗口对象来触发?如果是Win32 Console Application的工程,该怎么让它触发呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
cqgaoke
2006-01-10
打赏
举报
回复
客户端接字的创建是时不能要端口号,否则不能触发ONRECEIVE
cqgaoke
2006-01-06
打赏
举报
回复
ONRECEIVE何时才能收到。
xianshiqi
2006-01-06
打赏
举报
回复
控制台应用程序中receive()是要有函数调用的,至于如何调用,那就要根据你编程时程序执行顺序来实现,所以要保证服务器端和客户端receive()和send()的一致性
danielzhu
2006-01-06
打赏
举报
回复
UP
g_yxh
2005-10-10
打赏
举报
回复
up,高手们帮帮忙啊
ggw
2005-10-10
打赏
举报
回复
文档上说只调用返回出错且错误为WSAEWOULDBLOCK时且应用程序使用才能收到可覆盖的回调时才能收OnConnect消息。查MSDN
ufox
2005-10-10
打赏
举报
回复
没有窗口
消息不知道推动到那
------------------------
正确,你可以建立一个窗口但是不显示啊,把这些消息和该窗口联系起来。使用CAsyncSocket是需要这么一个步骤的。
CSocket已经预先建立了窗口了
我现在已经不在使用微软封装的几个xSocket类了,他们对于跨线程和在动态库中使用,经验丰富的人一定会大伤脑筋的哦,建议直接使用socket API吧,用来也并不复杂
nuaawenlin
2005-10-09
打赏
举报
回复
没有窗口
消息不知道推动到那
用多线程可以正常接收和发送
g_yxh
2005-10-09
打赏
举报
回复
是啊,连接成功了的,但把断点放在这个函数里:
void CClientSocket::OnConnect(int nErrorCode)
{
// TODO: Add your specialized code here and/or call the base class
CAsyncSocket::OnConnect(nErrorCode);
}
就会发现,没有执行这个函数。
其他的OnXxx函数同样没有执行到的。
annalee
2005-10-09
打赏
举报
回复
OnConnect是你重载CAsyncSocket的OnConnect事件???
都能收发,说明连接成功了啊!
我有一个问题:我服务器端,可以收发几次后,就收不到客户端发来的信息了,但是客户端显示发送成功,这是怎么回事??请指教
g_yxh
2005-10-09
打赏
举报
回复
nuaawenlin(飘人) :就是想问问,在Win32 Console Application里面,该怎样才能让OnXxx函数收到消息?因为现在连接关闭后,程序不知道,我想用OnClose来处理
g_yxh
2005-10-08
打赏
举报
回复
调用了这个的呀:
cSock->AsyncSelect(FD_READ | FD_WRITE | FD_CLOSE | FD_CONNECT | FD_OOB);
DentistryDoctor
2005-10-08
打赏
举报
回复
CAsyncSocket在内部会自己创建一个窗口的。
FD_READ?
g_yxh
2005-10-08
打赏
举报
回复
没有人回答吗?
g_yxh
2005-10-08
打赏
举报
回复
可能我没说清楚,现在的问题是,通信都很正常,如果直接用cSock->Receive可以接收数据,cSock->Send也正常,但就是OnXxx函数不能被调用
load888
2005-10-08
打赏
举报
回复
看看下面的你就知道啦
转载:
-------------------
FD_WRITE 相对来说就麻烦一些. 首先, 当你建立了一个连接时, 会产生一个 FD_WRITE 事件. 但是如果你认为在收到 FD_WRITE 时调用 send() 就万事大吉, 那就错了. FD_WRITE 事件只在发送缓冲区有多出的空位, 可以容纳需要发送的数据时才会触发.
上面所谓的发送缓冲区,是指系统底层提供的缓冲区. send() 先将数据写入到发送缓冲区中, 然后通过网络发送到接收端. 你或许会想, 只要不把发送缓冲区填满, 让发送缓冲区保持足够多的空位容纳需要发送的数据, 那么你就会源源不断地收到 FD_WRITE 事件了. 嘿嘿, 错了.上面只是说 FD_WRITE 事件在发送缓冲区有多出的空位时会触发, 但不是在有足够的空位时触发, 就是说你得先把发送缓冲区填满.
通常的办法是在一个无限循环中不断的发送数据, 直到把发送缓冲区填满. 当发送缓冲区被填满后, send() 将会返回 SOCKET_ERROR , WSAGetLastError() 会返回 WSAWOULDBLOCK . 如果当前这个 SOCKET 处于阻塞(同步)模式, 程序会一直等待直到发送缓冲区空出位置然后发送数据; 如果SOCKET是非阻塞(异步)的,那么你就会得到 WSAWOULDBLOCK 错误. 于是只要我们首先循环调用 send() 直到发送缓冲区被填满, 然后当缓冲区空出位置来的时候, 系统就会发出FD_WRITE事件. 有没有想过我能指出这一点来是多么不容易, 你可真走运. 下面是一个处理 FD_WRITE 事件的例子.
case FD_WRITE: // 可以发送数据了
{
// 进入无限循环
while(TRUE)
{
// 从文件中读取数据, 保存到 packet.data 里面.
in.read((char*)&packet.data, MAX_PACKET_SIZE);
// 发送数据
if (send(wparam, (char*)(&packet), sizeof(PACKET), 0) == SOCKET_ERROR)
{
if (WSAGetLastError() == WSAEWOULDBLOCK)
{
// 发送缓冲区已经满了, 退出循环.
break;
}
else // 其他错误
{
// 显示出错信息然后退出.
CleanUp();
return(0);
}
}
}
} break;
g_yxh
2005-10-08
打赏
举报
回复
把代码贴出来,大家帮我看看啊:
有个CClientSocket类,继承CAsyncSocket,里面有OnReceive、OnConnect等函数,是用classWizard自动生成的。
然后在程序里用下面这段来调用:
AfxSocketInit();
BOOL bOK;
CClientSocket * cSock = new CClientSocket();
if(cSock != NULL)
{
bOK = cSock->Create();
if(bOK == TRUE)
{
cSock->AsyncSelect(FD_READ | FD_WRITE | FD_CLOSE | FD_CONNECT | FD_OOB);
cSock->Connect("towel.blinkenlights.nl", 23);
Sleep(90);
}
else
{
ASSERT(FALSE); //Did you remember to call AfxSocketInit()?
delete cSock;
cSock = NULL;
}
}
connect后,OnConnect没有被执行到。
legendhui
2005-10-08
打赏
举报
回复
xx
求助大神,安卓中的蓝牙
调用
,broadcastRe
ceive
r中的onRe
ceive
函数怎么都不执行
本文主要探讨在Android应用中遇到的蓝牙BroadcastRe
ceive
r的onRe
ceive
方法未执行的问题。通过分析MainActivity的代码,展示了如何初始化蓝牙适配器、注册广播接收器以及处理蓝牙设备发现的相关操作。当点击扫描按钮启动设备发现时,预期onRe
ceive
会接收到ACTION_FOUND、ACTION_DISCOVERY_STARTED和ACTION_DISCOVERY_FINISHED等广播,但实际中并未触发,提示开发者检查注册过滤器和蓝牙状态。
BroadcastRe
ceive
r onRe
ceive
()没有被
调用
该博客讨论了一个在Android应用中遇到的问题,即BroadcastRe
ceive
r的onRe
ceive
方法没有被
调用
。作者在Activity中启动Service,Service扫描WiFi并发送广播更新到Activity,但Activity的广播接收器MyRe
ceive
r始终未接收到消息。博客内容包括了Activity和Service的代码片段,展示了动态注册BroadcastRe
ceive
r的过程。作者请求社区帮助找出可能的问题原因。
Broadcast的onRe
ceive
是在UI线程里面
调用
吗?
Android官方文档指出,BroadcastRe
ceive
r的onRe
ceive
方法通常在应用的主线程中执行,不应在此执行耗时操作。然而,对于最新的文档更新,内容可能有所变化,暗示存在不同情况。
SwiftUI中结合使用Timer和onRe
ceive
本文介绍如何在SwiftUI中使用Timer进行时间驱动的事件处理。包括基本的Timer设置、结合onRe
ceive
进行时间监听以及如何控制Timer的启动和停止。
OnRe
ceive
本文介绍了CAsyncSocket类中的两个重要成员函数OnRe
ceive
和OnAccept。OnRe
ceive
用于通知套接字缓冲中有待读取的数据;OnAccept则用于通知监听套接字可以接受新的连接请求。文中还详细列举了这两个函数的错误代码含义。
网络编程
18,357
社区成员
64,165
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章