当客户端断开时,服务器端如何即时得到已经断开的客户端的地址信息呢?

icegrape 2006-12-22 09:00:11
在服务器端,vc6.0,用基于MFC的CAsyncSocket类编程,想在某个客户端断开连接时,得知客户端的具体信息,但是在OnClose()函数调用GetPeerName((SOCKADDR*)&addrClose, &len),函数返回值显示WSAENOTSOCK,为什么呢?
是不是因为此时客户端已经关闭,无法得到已经断开的客户端的地址信息?
那么如果这种方法行不通,如何才能在某个客户端断开时,即时得到其相关信息呢?

...全文
243 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ProgrameMan 2006-12-23
  • 打赏
  • 举报
回复
是的,当一个套接字关闭后是无法使用 GetPeerName函数的,至于原因就是实现的方式问题
icegrape 2006-12-23
  • 打赏
  • 举报
回复
恩,呵呵,想问一下“在OnClose()函数调用GetPeerName((SOCKADDR*)&addrClose, &len),函数返回值显示WSAENOTSOCK,为什么呢?”这种方法是不是行不通,原因到底是什么呢?

是因为此时如果客户端关闭的话,用GetPeerName函数就不行了,是吗?
ProgrameMan 2006-12-23
  • 打赏
  • 举报
回复
虽然每一个客户端都是基于同一个类,但是类的实例是不同的啊
icegrape 2006-12-23
  • 打赏
  • 举报
回复
我的所有客户端都是基于同一个类的,当产生OnClose事件时,如何判断是哪一个客户端断开了呢?
ProgrameMan 2006-12-23
  • 打赏
  • 举报
回复
不用客气,及时结贴就好 呵呵
icegrape 2006-12-23
  • 打赏
  • 举报
回复
多谢多谢^_^
vc和网络编程都是刚刚接触,很多咚咚都稀里糊涂的
发帖有人回复真是十分感激阿,呵呵
ProgrameMan 2006-12-23
  • 打赏
  • 举报
回复
网线段开于客户端关闭是有区别的,一般的做法是客户端定期向服务器发送一些少量信息的数据(称之为心跳包),当服务器在一定时间内没有接收到来自客户端得心跳包则认为客户端已经无效了。
icegrape 2006-12-23
  • 打赏
  • 举报
回复
如果网线断开的话,还会触发OnClose事件吗?网线断开是不是与客户端关闭有很大区别?
如果那样的话,如何检测客户端的连接情况呢?
ProgrameMan 2006-12-23
  • 打赏
  • 举报
回复
操作系统自身对 tcp 以及 GetPeerName 的实现。
icegrape 2006-12-23
  • 打赏
  • 举报
回复
能再问一哈,这个“实现方式”具体指的是什么呢?
ProgrameMan 2006-12-22
  • 打赏
  • 举报
回复
在连接建立后先保存一份地址信息,关闭的时候在使用不就行了吗

18,356

社区成员

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

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