C++ 是否从此字符串分析IPV4地址?

C++ 是否从此字符串分析IPV4地址?,c++,C++,我使用的网络API为我提供了如下客户端IP: [::ffff:127.0.0.1]:54222:54222 我需要能够检测是否有两个客户端试图从同一IP地址连接。我不允许超过一个。为此,我需要解析这个字符串的ipv4部分 我只是不知道怎么做 我不能只做一个简单的子串就得到这个 谢谢 编辑:我不能只使用整个字符串,因为每个客户端而不是每个ip地址都是唯一的。类似于 /* parses 's' looking for a string between : and ] . If found, cop

我使用的网络API为我提供了如下客户端IP:

[::ffff:127.0.0.1]:54222:54222
我需要能够检测是否有两个客户端试图从同一IP地址连接。我不允许超过一个。为此,我需要解析这个字符串的ipv4部分

我只是不知道怎么做

我不能只做一个简单的子串就得到这个

谢谢

编辑:我不能只使用整个字符串,因为每个客户端而不是每个ip地址都是唯一的。

类似于

/* parses 's' looking for a string between : and ] . If found, copies that
string into ipv4 and returns 1 */
int extract_ip4 (char *s, char *ipv4)
{
  char *p,*q;
  int i;

  q = strchr (s, ']');  /* search for ']' */
  if (!q)
    return 0;
  for (p=q;p!=s && *p!=':';p--);  /* search for ':' backwards from ']' */
  if (p==s)
    return 0;
  strncpy (ipv4,p+1,q-p-1);  /* copy portion of string to ipv4 */
  ipv4[q-p-1]='\0';
  return 1;             /* address found and copied */
}

如果API为您提供了这样的IPv6地址,为什么不在检查重复项时使用整个IPv6地址?@GregHewgill即使来自同一IP,端口也会更改。我需要一种方法来识别它是否是重复的。所以只需使用地址部分,而忽略端口。我不太确定我是否看到了这里的困难。好吧,这里有一个用IPv6语法封装的IPv4地址(可能是由您使用的API封装的)。正如你所看到的,在那里没有Mac信息。我认为你应该首先解析IP字符串,然后将其转换为SokAdDrdIn或SokAdDrimi6,然后比较它。我认为这不是C++最通用的方式。