该函数将读取一行DNS服务器信息并检查它是否为四元组并存储在列表中。
该行将是:8.8.8.8 , 8.8.4.4
问题是它会正确读取第一个并打印十进制值:134744072
但其次是:1476921352
请帮助代码...
因此pszString将读取整行并将每个地址存储在列表中[d] [i]
int SetDNSserver(char* pszString) {
memset( dnsip, 0, sizeof(dnsip) ); //clear out old
const char *p;
int i=0;
char *nameDottedQuad ;
std::string dottedquad;
int flag=0;
for( p = pszString; *p; ++p ) {
if( isdigit(*p) || *p == '.' ) {
//copy the value to dottedquad
dottedquad+=*p;
FREE_SAFE(nameDottedQuad);
nameDottedQuad = strdup(dottedquad.c_str());
if(isValidIpAddress(nameDottedQuad)) {
//save it in a list
while(i<10) {
dnsip[i] = inet_addr(nameDottedQuad);
#ifdef ANDROID_DEBUG
__android_log_print(ANDROID_LOG_INFO, DEBUG_TAG," DNSSERVER:%d",dnsip[i]);
#endif
i++;
break;
}
}
}
else {
//DisplayNot dotted quad ");
}
}
static bool isValidIpAddress(char *ipAddress) {
struct sockaddr_in sa;
int result = inet_pton(AF_INET, ipAddress, &(sa.sin_addr));
return result != 0;
}
}
#define FREE_SAFE(x) { if (((x) != NULL)) \
{ free(x); (x) = NULL; } }
答案 0 :(得分:0)
顺便说一句,如果IP地址有效,您无需在每次迭代中签入。您可以等到完成处理输入字符串,然后只检查一次它是否是有效的IP地址。
答案 1 :(得分:0)
有很多问题,其中一个是解析问题.FREE_SAFE没有正确使用。这个的逻辑方法必须改变,现在工作正常。