如何象CSocket类那样使自定义的套接字类具有消息机制?

bdove 2003-08-24 11:36:57
我想自定义一个套接字类,想要他有消息处理机制,就象CSocket类那样。
但是如何才能使WSAAsyncSelect()函数捕获消息并交给消息处理函数??
...全文
71 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
smch 2003-08-31
  • 打赏
  • 举报
回复
反正俺总是使用raw socket。也就那么几步。
bdove 2003-08-31
  • 打赏
  • 举报
回复
多谢,原来我想自己封装一个类,也用消息机制,后来我决定改用事件。
谢谢各位的帮忙,我再自己仔细研究一下,不明白处,再向你们请教!
bdove 2003-08-30
  • 打赏
  • 举报
回复
CSocket中的消息是其中封装的静态窗口所发出来的,很容易收不到消息或者过多而出错的!
ahao 2003-08-30
  • 打赏
  • 举报
回复
用消息==用CSocket??
bdove 2003-08-30
  • 打赏
  • 举报
回复
我讨厌用窗口的消息机制,一旦消息阻塞,会被他整死,现在我碰上的问题想试试用事件来解决,但愿不会象消息那样!

Windows的消息机制不是那么好用,用TCP/IP,CSocket类,如果客户一次发的请求过多,消息窗口就会出错.
ahao 2003-08-30
  • 打赏
  • 举报
回复
用窗口是最简单的,其他模型必须用线程,必须处理同步
bdove 2003-08-30
  • 打赏
  • 举报
回复
我知道WSAAsyncSelect()需要一个窗口,
但是我现在想不用WSAAsyncSelect()这个函数,想用WSAEventSelect()来做,这个是不需要窗口的,但是不清楚如何做!
请指教!
Skt32 2003-08-30
  • 打赏
  • 举报
回复
一个 Winsock API 打包类CNetworking 详细信息 < WinSock >

这是个基于网络(包括Winsock API和非Winsock API)的C++类CNetworking ,用它可以发送、接收、连接、断开和获取对方端口各种不同的信息。与这个类的旧版本相比,新版本的主要优点是完全将连接对象化,不需要窗口就可以处理网络消息,通过定义回调函数或事件即可,甚至连通知消息都可以不用。包含有文档说明。

http://www.vckbase.com/code/downcode.asp?id=1464
ahao 2003-08-30
  • 打赏
  • 举报
回复
代码不能给,因为和公司有保密协议,你说的问题不太可能是消息队列溢出的问题,你多了解一些socket的实现就知道了,我的实现和MFC的CAsyncSocket是类似的,MFC的实现用的是winsock1.0,虽然宣称CAsyncSocket是异步模式,但其中用的很多函数都是同步的。自己封需要写一个窗口类,用SDK方式,只需要处理socket消息,同一个线程中创建的socket类实例共享一个窗口实例,所有的同步操作都用winsock2.2版本的异步版本替换,就这么简单。类设计上来说,不要象MFC一样把OnReceive等函数写成虚函数,这样不利于对代理和加密等功能的透明支持,而应该用类似模板方法模式一样对用户隐藏这一层,暴露另外一套可控制的虚函数。

bdove 2003-08-30
  • 打赏
  • 举报
回复
CSocket本身就先天不足,这是事实,出事溢出消息队列,也不奇怪!
我是在做性能测试时,发现的这个问题,我在不到一毫秒内,就发送超过500个请求,就出现了问题
对了,能否把你封装的类给我参考参考!先谢谢了!
depuw@163.com
ahao 2003-08-30
  • 打赏
  • 举报
回复
我从来不用CSocket,因为它先天不足,我用自己封的基于windows消息的socket类,我用它作了很多client端的应用,一直工作得很好。如果是server端,可以考虑用IOCP,但我实在想像不出来,你做的什么应用,能让socket收到的消息多到溢出消息队列了或者象你说的收不到消息,如果是,那99%的可能是你的设计或代码的问题。
bdove 2003-08-30
  • 打赏
  • 举报
回复
不信,你自己试试吧!
我反正是领教过它了!
ahao 2003-08-30
  • 打赏
  • 举报
回复
凭什么说是csocket出错,不是你自己乱写?
“很容易收不到消息或者过多而出错”这样的说法你有什么根据
不录 2003-08-29
  • 打赏
  • 举报
回复
WSAAsyncSelect需要窗口hWnd一起协调才行,在MFC中,使用了一个CSocketWnd类来处理套接字窗口,你可以看看sockcore.cpp文件,在VC的MFC中的SRC文件夹下。
bdove 2003-08-29
  • 打赏
  • 举报
回复
能给我一个WSAEventSelect的例子吗?
kunjun_oy 2003-08-27
  • 打赏
  • 举报
回复
WSAAsyncSelect要和窗口过程绑定,支持消息,比较麻烦,CAsyncSocket即用此实现。
WSAEventSelect和WSAAsyncSelect类似,它是用事件方式,相对简单一些。
自己写Socket类,考虑用第二种方法。
masterz 2003-08-24
  • 打赏
  • 举报
回复
你看看CSocket的源码啊
也可以参考http://www.codeproject.com/internet/casyncsocketex.asp
joinrry 2003-08-24
  • 打赏
  • 举报
回复
运用socket I/O端口模型
1、select
2、异步选择端口
3、事件选择端口
4、重叠端口
5、完成端口

具体参考《windows网络编程》一书,最经典的网络编程书籍
flinming 2003-08-24
  • 打赏
  • 举报
回复
up

18,356

社区成员

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

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