当前位置接口:
http://ip.ws.126.net/ipquery
代码:
#define GET_CITY_IP "59.111.181.52"
#define GET_CITY_IP_REQUEST "GET http://ip.ws.126.net/ipquery\r\n\r\n"
static int socketfd = -1;
static struct sockaddr_in server_addr;
int main(int argc, char **argv)
{
int ret;
int len;
bzero(&server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(SERVER_HTTP_PORT);
server_addr.sin_addr.s_addr = inet_addr(GET_CITY_IP);
char json_buffer[2048];
char request[1024] = {0};
memset(json_buffer, 0, 2048);
if ((socketfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
fprintf(stderr, "sokcet error : %s\r\n", strerror(errno));
exit(1);
}
if (connect(socketfd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) < 0) //发起连接
{
fprintf(stderr, "connect failed : %s\r\n", strerror(errno));
close(socketfd);
exit(1);
}
sprintf(request, "%s", GET_CITY_IP_REQUEST);
ret = send(socketfd, request, strlen(request), 0);
if (ret < 0)
{
fprintf(stderr, "send errr %s\r", strerror(errno));
}
if (recv(socketfd, json_buffer, sizeof(json_buffer), 0) > 0)
{
char *pout;
printf("%s\r\n", json_buffer);
len = gbk2utf8(&pout, json_buffer, strlen(json_buffer));
printf("out_buf=%s\n", pout);
free(pout);
}
else
{
fprintf(stderr, "recv errr %s\r\n", strerror(errno));
}
close(socketfd);
}
获取位置接口的IP地址的方法:
打开cmd,ping 接口域名,从返回信息就可以看到接口的IP地址,也就是connect连接要用到的地址
获取到的原始数据应该是gbk编码
的,所以在PC上显示是乱码。
需要做一个编码转换:
len = gbk2utf8(&pout, json_buffer, strlen(json_buffer));