C语言socket判断网络是否联通(支持域名/附源码)
来源:互联网 发布:沪昆高铁贵州段 知乎 编辑:程序博客网 时间:2024/06/08 19:11
有时候需要用代码判断当前网络是否联通
#include <stdio.h>#include <sys/socket.h>#include <netinet/in.h>#include <net/if.h>#include <string.h>#include <stdlib.h>#include <stdio.h>#include <signal.h>#include <arpa/inet.h>#include <sys/types.h>#include <sys/socket.h>#include <unistd.h>#include <netinet/in.h>#include <netinet/ip.h>#include <netinet/ip_icmp.h>#include <netdb.h>#include <setjmp.h>#include <errno.h>
//#define NET_PORT 53//#define NET_IP "8.8.8.8" //谷歌DNS#define NET_PORT 80#define NET_IP "www.baidu.com" //百度80端口
//获取联网状态int check_net(void){ int fd; int in_len=0; struct sockaddr_in servaddr; struct hostent *host; unsigned int inaddr=0l; struct in_addr *ipaddr; in_len = sizeof(struct sockaddr_in); fd = socket(AF_INET,SOCK_STREAM,0); if(fd < 0) { perror("socket"); return -1; } /*设置默认服务器的信息*/ servaddr.sin_family = AF_INET; servaddr.sin_port = htons(NET_PORT); //servaddr.sin_addr.s_addr = inet_addr(NET_IP); memset(servaddr.sin_zero,0,sizeof(servaddr.sin_zero)); /*判断是主机名还是ip地址*/ if( inaddr=inet_addr(NET_IP)==INADDR_NONE) { if((host=gethostbyname(NET_IP) )==NULL) /*是主机名*/ { perror("gethostbyname error"); return (-1); }#ifdef DEBUG printf("0IP Address : %s\n",inet_ntoa(*((struct in_addr *)host->h_addr))); printf("1IP Address : %s\n",inet_ntoa(*((struct in_addr *)host->h_addr_list[1]))); printf("h_name : %s\n",host->h_name); printf("h_aliases : %s\n",host->h_aliases); printf("h_addrtype,h_length : %d,%d,AF_INET=%d\n",host->h_addrtype,host->h_length,AF_INET);#endif//方法1: ipaddr = (struct in_addr *)host->h_addr;servaddr.sin_addr.s_addr = (ipaddr->s_addr);//方法2:这个算是多此一举了!多了一句无用功// inaddr = inet_addr(inet_ntoa(*ipaddr));//servaddr.sin_addr.s_addr = inaddr;} else /*是ip地址*/ { servaddr.sin_addr.s_addr = inaddr; } /*connect 函数*/ if(connect(fd,(struct sockaddr* )&servaddr,in_len) < 0 ) { printf("not connect to internet!\n "); close(fd); return 0; //没有联网成功 } else { printf("=====connect ok!=====\n"); close(fd); return 1; }}
上述函数可能有待于优化,因为如果短时间内连续执行可能会出现停滞的情况,打印不出来connet ok!不过1s调用一次这个函数来检测应该是可以的!
欢迎网友为我指正里面的不足之处!
- C语言socket判断网络是否联通(支持域名/附源码)
- 一句话判断网络是否联通
- delphi 域名转ip并判断ip是否可以联通
- c++域名判断是否ipv6的网络
- linux下C语言判断网络是否连接
- linux网络编程之:获取指定网卡网络数据包并分析(附C语言源码)
- 【C#】[网络]判断是否联网
- C编程获取指定网卡网络数据包并分析(附C语言源码)
- C语言 判断是否素数
- android判断手机是否支持某种语言
- C 判断socket 是否已经断开
- 检测网络是否联通:SIOCETHTOOL
- 测试网络是否联通 telnet
- 判断FreeEIM网络是否连通(c/c++)
- WIN判断网络是否连通(c/c++)
- Linux C语言ping方法判断是否已经连接网络方法
- [C#]精确的判断网络是否可用
- Linux C 判断网络是否连接
- OpenStack的架构详解(8)
- php代码优化方法,加速运行速度的技巧总结
- opencv中CvSeq的用法
- PHP使用PEAR的auth_http类库用身份校验
- WPF - ListBox显示任意内容
- C语言socket判断网络是否联通(支持域名/附源码)
- OpenStack的架构详解(9)
- JavaScript 基础之一
- OpenStack的架构详解(10)
- 显示乱码问题
- OpenStack的架构详解(11)
- dll传递string实现方法
- FTPS vs. SFTP: What to Choose
- Executors 和线程池