nrf9160开发板连接googleapis.com地理定位服务被拒绝问题求助
排查步骤与解决方案
确认DNS解析结果正确性
首先打印getaddrinfo返回的res结构中存储的IP地址,对比正常可访问谷歌服务的网络环境下解析googleapis.com得到的IP是否一致。如果IP匹配不上,说明当前使用的蜂窝网络存在DNS污染,可尝试手动指定googleapis.com的合法IP做测试,或者更换支持谷歌服务的APN/SIM卡。校验端口配置
确认你代码中HTTPS_PORT宏定义的值为标准HTTPS端口443,端口配置错误会直接导致服务端拒绝连接。修正TLS配置项
- 确认你烧录到开发板的是
googleapis.com对应的GTS Root R1根证书,不要误用google.com的站点证书,两者根证书链不一致。 - 检查
tls_setup函数逻辑,确认TLS握手时已正确配置SNI扩展,Server Name字段必须设置为googleapis.com,谷歌CDN会直接拒绝未携带正确SNI的TLS握手请求。
- 确认你烧录到开发板的是
修复地址结构处理逻辑
你当前代码直接将res->ai_addr强制转换为struct sockaddr_in、硬编码地址长度为sizeof(struct sockaddr_in)的写法存在问题:如果getaddrinfo返回的是IPv6类型的地址,该操作会导致地址、端口配置完全错误。修改为如下逻辑即可:// 调用getaddrinfo前优先指定hints参数,强制返回IPv4地址,避免后续强转出错 struct addrinfo hints = { .ai_family = AF_INET, .ai_socktype = SOCK_STREAM, .ai_protocol = IPPROTO_TCP, };
内容的提问来源于stack exchange,提问作者Jeremy Dorn
相关产品推荐
相关产品推荐

