BOOL GetIPAddress(HWND hwnd)
{
HWND hwndIP;
char str[MAX_PATH] = "\0";
int iLength;
//取得IP地址
hwndIP = GetDlgItem(hwnd, IDE_IPEDIT);
iLength = GetWindowTextLength(hwndIP);
GetWindowTextA(hwndIP, str, iLength+1);
//如果没找到','符号,直接调用IsIPAddress
if (strchr(str, ',') == NULL)
{
if (IsIPAddress(hwnd, str))
{
strcpy(g_szIPAddress, str);
return TRUE;
}
else
{
return FALSE;
}
}
char *pTemp = NULL;
int iCount = 0; //存放ip个数
//获得ip个数
pTemp = strchr(str, ',');
while (pTemp != NULL)
{
iCount++;
pTemp++;
pTemp = strchr(pTemp, ',');
}
char *pp; //存放每次找到','符号后面的地址
char *pStr[MAX_PATH] = {NULL}; //存放ip指针
int i = 0;
//分别取出ip,保存在pStr
char *p = strchr(str, ',');
*p = '\0';
pStr[i++] = str;
p++;
while (p != NULL)
{
pp = p;
p = strchr(pp, ',');
if (p != NULL)
{
*p = '\0';
pStr[i++] = pp;
p++;
}
else
{
pStr[i++] = pp;
}
}
int mask = 0; //用来判断是否有合法的ip
ZeroMemory(g_szIPAddress, sizeof(g_szIPAddress));
//调用IsIPAddress,如果ip合法 就存放在g_szIPAddress
for (int y = 0; y < iCount; y++)
{
if (IsIPAddress(hwnd, pStr[y]))
{
strcat(g_szIPAddress, pStr[y]);
if (y != (iCount - 1))
{
strcat(g_szIPAddress, ",");
}
mask++;
}
}
//至少要有一个合法的ip,否则放回FALSE
if (mask > 0)
{
return TRUE;
}
else if (mask == 0)
{
return FALSE;
}
return TRUE;
}
BOOL IsIPAddress(HWND hwnd, char *str)
{
char *pTemp = NULL;
int iCount = 0;
//获得ip有几个 '.'
pTemp = strchr(str, '.');
while (pTemp != NULL)
{
iCount++;
pTemp++;
pTemp = strchr(pTemp, '.');
}
if (iCount != 3)
{
return FALSE;
}
const char *pChar;
bool rv = true;
int tmp1, tmp2, tmp3, tmp4, i;
i = sscanf(str, "%d.%d.%d.%d", &tmp1, &tmp2, &tmp3, &tmp4);
if( i != 4 )
{
return FALSE;
}
if ((tmp1 > 255) || (tmp2 > 255) || (tmp3 > 255) || (tmp4 > 255))
{
return FALSE;
}
for (pChar = str; *pChar != 0; pChar++)
{
if ((*pChar != '.') && ((*pChar < '0') || (*pChar > '9')))
{
return FALSE;
}
}
return TRUE;
}