帮忙看下我对mfc的socket编程的思路是否正确

magicing 2008-09-11 12:45:00
刚开始学mfc的socket编程,连续几天之后还是很头疼,就是两个类,一个阻塞的CSocket类和不阻塞的CAsyncSocket类,我想做个最基本最简单的程序,就是开两个窗口,一个是服务器端,一个是客户端,一个点启动,另一个去连接,在用阻塞的CSocket的时候是可以连接的,服务器端大致如下:CSocket server,conn;建立两个socket类,然后server.create(nPort),然后server.listen(),最后server.accept(conn)就会阻塞在那里等待连接了,客户端的差不多,就是建立以后client.connect("127.0.0.1",nPort)去连接,服务器端就建立连接然后阻塞取消了。但是换成CAsyncSocket以后就不一样了,如果不改程序好像根本连不上。我的问题是server.accept()是不阻塞的直接返回了,后面还会跟上server.close(),socket都关闭了这样还能等到客户端的connect吗?有些书上是说用一个自己的类去继承CAsyncSocket,然后重写onaccept等方法,然后把server.accept放在onaccept里面,这种方法我也试过,可是好像怎么也触发不了onaccept事件,我这里也有疑问,是这样用的吗,在服务器端只要server.listen()之后就可以等客户端连接,一有connect之后就会触发onaccept事件了吗,如果不是那么应该怎么去正常使用呢,是不是一定要有类继承CAsyncSocket然后重写方法呢?希望有人能帮忙分析一下,或者帮忙贴出最简单的程序代码,只要能实现的代码段就可以了,迷茫了好一阵子了希望得到解答!!
...全文
139 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnzdgs 2008-09-11
  • 打赏
  • 举报
回复
按照书的描述的做法去做。要注意CAsyncSocket是利用消息来运行的,在Listen之后程序应该返回消息循环,不知道你的程序是什么架构,在哪里调用Listen的。
cnzdgs 2008-09-11
  • 打赏
  • 举报
回复
把MySock server加到对话框类里面,作为成员变量。
magicing 2008-09-11
  • 打赏
  • 举报
回复
顺便问下,成员变量和函数都是定义在头文件中的,可是include都是在cpp文件中的,我如果直接在头文件中加入MySock server的话会不认,难道还要在头文件里再
include MySock.h吗?
magicing 2008-09-11
  • 打赏
  • 举报
回复
哦不能是局部变量啊,可能问题出在这里,我去修改看看,多谢!
cnzdgs 2008-09-11
  • 打赏
  • 举报
回复
server是在哪里定义的?不能用局部动态变量。
magicing 2008-09-11
  • 打赏
  • 举报
回复
MySock server,conn;

server.Create(7001,SOCK_STREAM,FD_ACCEPT);

server.Listen();

这是我服务器端的代码,MySock继承了CAysncSocket类也重写了onAccept方法
CAsyncSocket client;
client.Create();

client.Connect("127.0.0.1",7001);
这是我客户端的代码,我只要最简单的建立连接就可以,请问这样在服务器端启动后客户端去连接能触发onAccept事件吗,反正我这里是怎么也触发不了。
cattycat 2008-09-11
  • 打赏
  • 举报
回复
FD_ACCEPT事件对应OnAccept()方法
magicing 2008-09-11
  • 打赏
  • 举报
回复
重写的Onaccept方法就是用来响应消息的,可是不被触发,我socket.create方法用的是默认参数,看书上说应该是所有消息都响应的,所以现在不被触发我不知道是客户端connect的问题还是服务器端listen的问题,也不知道该怎么去调试了,如果有谁机器上能正常运行的话帮忙把主要代码贴出来好吗,判断什么都不用加了,只要最基本的能触发onaccept事件的代码就好。
yayafu 2008-09-11
  • 打赏
  • 举报
回复
要继承CAsyncSocket类并重写OnAccept,OnReceive和OnClose
cattycat 2008-09-11
  • 打赏
  • 举报
回复
非阻塞的应该响应什么消息吧,触发消息再处理,在原来的基础上加上消息处理的应该就行了。
magicing 2008-09-11
  • 打赏
  • 举报
回复
我就是用mfc的向导建立的对话框程序,是在一个button的响应事件方法里建立socket,然后listen,然后用客户端的socket去connect,可是我在onaccept方法上加了断点,从来都没触发过,所以我不知道问题出在什么地方,还有什么方法能调试吗?

18,356

社区成员

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

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