社区
网络编程
帖子详情
OnReceive为什么不被调用?
g_yxh
2005-10-08 09:44:37
CAsyncSocket的OnReceive函数执行是不是一定要个窗口对象来触发?如果是Win32 Console Application的工程,该怎么让它触发呢?
...全文
521
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
vc 串口编程示例
vc 使用MSCOMM32控件的串口通信编程实例 简单易懂
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 。(翻译:这个方法一般会在主线程里
调用
,所以你不该在里面执行时间过
网络编程
18,357
社区成员
64,164
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章