MFC局域网监控系统

江湖小虾米东方未明 2012-10-27 07:16:38
最近在做一个MFC局域网监控,针对客户机上线, 我通过
ConnectSocket *pSocket=new ConnectSocket();
m_Serversock.Accept(*pSocket)
得到的这个ConnectSocket能否知道该客户机的主机名啊?
还有一个问题是有什么好方法在关于客户端程序关闭的时候,作为服务器端程序如何捕捉,从而我可以再监控列表中删除这个客户呢?(Seversock,Connectsocket都是继承自MFC的CSocket的两个类)
求大神给点指点~
...全文
269 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
BeanJoy 2012-10-29
  • 打赏
  • 举报
回复
1.得到主机名:
inet_addr->gethostbyaddr
例子:

unsigned long addr = inet_addr(W2A(IpAddress));
struct hostent FAR * lpHostEnt = gethostbyaddr((char*)&addr,4,AF_INET);
CString name = lpHostEnt->h_name;

IpAddress为CString变量;

2.心跳:
例子:

struct tcp_keepalive ka;
struct tcp_keepalive outka;

ka.onoff=1;
ka.keepalivetime=20*1000; //20秒
ka.keepaliveinterval=5*1000; //5秒

if(0 !=::WSAIoctl(m_hSocket,SIO_KEEPALIVE_VALS,
&ka, sizeof(struct tcp_keepalive),
&outka,sizeof(struct tcp_keepalive),
&bytesout,NULL,NULL))
{
...
}
zzyoucan 2012-10-29
  • 打赏
  • 举报
回复
正在做一个差不多的,一直在改,我都快烦死了。
winginsky 2012-10-29
  • 打赏
  • 举报
回复
客户端和服务器断开连接的类型太多了,还是发送心跳包确认比较好,省事。
傻X 2012-10-28
  • 打赏
  • 举报
回复
客户端在connect的时候,服务器端就能获得其IP和PORT的

另外:
服务器端本身有列表,定时给列表中的客户发送信息不就可以了吗?类似心跳这种。收不到回复到一次数就CUT掉列表中的位置。
stelleroid 2012-10-28
  • 打赏
  • 举报
回复
局域网获取主机名不是用WINS协议么?


调用closesocket关闭套接字,不就是正常关闭套接字么?
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

应该很容易得到客户端的IP和PORT等信息
如果你的客户端是正常关闭的话,调用closesocket(),你的服务器应该会事件通知函数OnReceive()被调用吧。
[/Quote]
部长 我可用通过connectsocket.peername获得客户端的端口号和IP地址 但得不到主机名啊,
还有关于客户端正常关闭 我想问下部长怎么样才算是正常关闭啊。。
Eleven 2012-10-27
  • 打赏
  • 举报
回复
应该很容易得到客户端的IP和PORT等信息
如果你的客户端是正常关闭的话,调用closesocket(),你的服务器应该会事件通知函数OnReceive()被调用吧。

18,356

社区成员

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

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