现在的位置: 首页 > 综合 > 正文

从 ip138 读取 IP 地址并显示

2012年10月31日 ⁄ 综合 ⁄ 共 1391字 ⁄ 字号 评论关闭

  东学西学, 最近在学 WinSock 编程了....
  写了一个小小的聊天程序, 一直懒于写博客...
  但还是记录下学习过程, 并分享点或许实用的代码....
  初学(昨天<2012-09-09>开始学网络), 别见笑~~~
  -----------------------
  这个是从 ip138.com  获取IP数据并返回的, 有时候建立连接会用到.
  获取IP的页面是:http://iframe.ip138.com/city.asp
  源代码(VC60编译的):

//getip.c
#include <Windows.h>
#include <WinInet.h>
#include <stdio.h>
#include <string.h>
#pragma comment(lib, "WinInet.lib")
int main(void)
{
    char buffer[256];
    char* ptr1 = NULL;
    HINTERNET hInternet = NULL;
    HINTERNET hInetURL = NULL;
    DWORD dwNumberOfBytesRead;
    hInternet = InternetOpen("nbsg", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
    if(hInternet == NULL)
    {
        fprintf(stderr, "InternetOpen() 错误.\n");
        return GetLastError();
    }
    hInetURL = InternetOpenUrl(hInternet, "http://iframe.ip138.com/city.asp", NULL, 0, 0, 0);
    if(hInetURL == NULL)
    {
        fprintf(stderr, "InternetOpenUrl 错误.\n");
        InternetCloseHandle(hInternet);
        return GetLastError();
    }
    if(!InternetReadFile(hInetURL, buffer, sizeof(buffer)-1, &dwNumberOfBytesRead))
    {
        fprintf(stderr, "InternetReadFile() 错误.\n");
        InternetCloseHandle(hInetURL);
        InternetCloseHandle(hInternet);
        return GetLastError();
    }
    buffer[dwNumberOfBytesRead] = 0;
    ptr1 = strstr(buffer, "您的IP是:[");
    if(!ptr1)
        fprintf(stderr, "从 ip138 获取的数据错误.\n");
    else
    {
        char* pp = ptr1;
        while(*ptr1 && *ptr1!='<')
            ptr1++;
        *ptr1 = 0;
     ptr1 = pp;
    }
    printf("%s\n", ptr1?ptr1:"<null>");
    InternetCloseHandle(hInetURL);
    InternetCloseHandle(hInternet);
    return 0;
}

 效果图:

呃, 很明显, 我不在陕西省, 我也不是联通, ip138 ......

女孩不哭(QQ:191035066) @ 2012-09-10 21:04:19 @ http://www.cnblogs.com/nbsofer

抱歉!评论已关闭.