有时候弄一些网络通信,经常用到域名地址,在进行tcp初始的时候,需要判断提供的地址是IP还是域名地址。如果传入的是正确的域名地址,则判断不是IP后进行域名解析,如果是IP地址格式的直接进行TCP初始化连接,
所以弄了个测试程序,判断获取的字符串是否是合法的IP地址,只是简单测试了下,可以正确判断,不过不保证没有错漏的。
#include<stdio.h> #include<iostream> int check_if_ipaddr(unsigned char *ipstr){ int ret = -1; unsigned char dotnum = 0; unsigned short maxval = 0; while(*ipstr != '\0'){ if((*ipstr >= '0') && (*ipstr <= '9')){ maxval = maxval*10 + (*ipstr - '0'); }else if(*ipstr == '.'){ dotnum++; if(dotnum > 3){ printf("dot num is large than 3\r\n"); return -1; } if(maxval< 0 || maxval >255){ printf("max value is larger than 255 value=%d\r\n",maxval); return -1; } maxval = 0; }else{ printf("ipstring char is illegal \r\n"); return -1; } ipstr++; } if(maxval >=0 && maxval <=255){ if(dotnum == 3){ return 1; } } return -1; } int main() { int result = -1; unsigned char ipstradd[60] ="192.168.0.103";
if(check_if_ipaddr(ipstradd) != 1) { printf("is not ipaddr format.....\r\n"); }else{ printf("is ipaddr format.....\r\n"); } return 0; }
