免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1751 | 回复: 2
打印 上一主题 下一主题

[C] C tcp异常检测的方法? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-10-08 04:05 |只看该作者 |倒序浏览
本帖最后由 xqf 于 2014-10-08 13:50 编辑

请教:如何主动式检测某些 指定IP地址的客户端 是否在线, 如已知:IP:192.168.0.1   192.168.0.6   192.168.0.20 等

在网上找到一段C 函数,不知道能否用,还请指教:
函数代码如下:

  1. #include <netinet/tcp.h>  
  2. int set_tcp_keepAlive(int fd, int start, int interval, int count)  
  3. {  
  4. int keepAlive = 1;  
  5. if (fd < 0 || start < 0 || interval < 0 || count < 0) return -1;  
  6. //启用心跳机制,如果您想关闭,将keepAlive置零即可  
  7. if(setsockopt(fd,SOL_SOCKET,SO_KEEPALIVE,(void*)&keepAlive,sizeof(keepAlive)) == -1)  
  8. {  
  9. perror("setsockopt");  
  10. return -1;  
  11. }  
  12. //启用心跳机制开始到首次心跳侦测包发送之间的空闲时间  
  13. if(setsockopt(fd,SOL_TCP,TCP_KEEPIDLE,(void *)&start,sizeof(start)) == -1)  
  14. {  
  15. perror("setsockopt");  
  16. return -1;  
  17. }  
  18. //两次心跳侦测包之间的间隔时间  
  19. if(setsockopt(fd,SOL_TCP,TCP_KEEPINTVL,(void *)&interval,sizeof(interval)) == -1)  
  20. {  
  21. perror("setsockopt");  
  22. return -1;  
  23. }  
  24. //探测次数,即将几次探测失败判定为TCP断开  
  25. if(setsockopt(fd,SOL_TCP,TCP_KEEPCNT,(void *)&count,sizeof(count)) == -1)  
  26. {  
  27. perror("setsockopt");  
  28. return -1;  
  29. }  
  30. return 0;  
  31. }  
复制代码
谢谢


论坛徽章:
0
2 [报告]
发表于 2014-10-08 13:49 |只看该作者
援助之手,谢谢

论坛徽章:
0
3 [报告]
发表于 2014-10-09 11:32 |只看该作者
客户端 是否在线,这个客户端应该侦听某个端口吧,你直接connect这个端口行不行?但能连接上也不一定说它在线。因为其他进程也可能用这个端口。最好的方法是客户端之间有个协议,哪怕是字符串,HTTP的,你发一下,它回一下,回复内容正常就说明在线了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP