社区
网络编程
帖子详情
OnReceive为什么不被调用?
g_yxh
2005-10-08 09:44:37
CAsyncSocket的OnReceive函数执行是不是一定要个窗口对象来触发?如果是Win32 Console Application的工程,该怎么让它触发呢?
...全文
461
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
Android+桌面小部件+Widgets+ 桌面小部件使用案例
桌面小部件使用案例,实现AppWidgets主要功能类AppWidgetProvider生命周期解析 AppWidgetProvider生命周期 1、在桌面上添加小部件,让小部件可用会
调用
:onEnabled 2、作为通知会
调用
onRe
ceive
3、小部件可用后会
调用
onUpdate,表明小部件状态由不可用变为可用发生了变化 4、作为通知又会
调用
onRe
ceive
5、当拽小部件到垃圾篓删除小部件时会
调用
onDeleted 6、作为通知又会
调用
onRe
ceive
7、删除小部件后,小部件变为了不可用会
调用
onDisabled 8、作为通知又会
调用
onRe
ceive
BroadcastRe
ceive
r onRe
ceive
()没有被
调用
代码个功能是在activity中启动service,在service中获取相关数据后广播给activity,activity刷新界面,但是activity中的onRe
ceive
怎么也不执行。 说明:使用的是动态注册 这个是activity代码: package com.jade.hust; import java.util.ArrayList; import java.util.
android广播接受使用,android – 广播接收器onRe
ceive
()从未
调用
过
我在ICS中遇到此问题,但在以前的版本中没有:从App1,我发送广播并尝试在App 2活动中接收它.但是在App 2的活动中从未
调用
onRe
ceive
.虽然我已正确指定了所有内容,但我无法理解该块的onRe
ceive
被
调用
的是什么.我先运行BroadcastRe
ceive
然后再运行BroadcastSend任何帮助我解决这个问题的帮助都非常感谢.App1发送活动public class Broad...
Broadcast的onRe
ceive
是在UI线程里面
调用
吗?
写代码时候看到android代码里的javadoc说onRe
ceive
是The function is normally called within the main thread of its process, so you should never perform long-running operations in it 。(翻译:这个方法一般会在主线程里
调用
,所以你不该在里面执行时间过
Broadcastre
ceive
r onre
ceive
函数重复
调用
debug过程中 发现一个re
ceive
r的onre
ceive
函数重复
调用
了两次 仔细分析了一下 原来自己在隐式
调用
的时候 在manifest中给re
ceive
r添加了一个category android:name="android.intent.category.DEFAULT" 而自己的filter里添加了系统自带的 action android:name="android.
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章