Chinaunix首页 | 论坛 | 博客
  • 博客访问: 222098
  • 博文数量: 88
  • 博客积分: 3020
  • 博客等级: 中校
  • 技术积分: 707
  • 用 户 组: 普通用户
  • 注册时间: 2009-02-12 16:56
文章分类
文章存档

2010年(26)

2009年(62)

我的朋友

分类: WINDOWS

2009-02-12 17:10:32

#include       
#include       
#include       
#pragma comment(lib, "ws2_32.lib")

void geturl(char *url)
{
        WSADATA WSAData={0};
        SOCKET        sockfd;
        struct sockaddr_in        addr;
        struct hostent        *pURL;
        char        myurl[BUFSIZ];
        char        *pHost = 0, *pGET = 0;
        char        host[BUFSIZ], GET[BUFSIZ];
        char        header[BUFSIZ] = "";
        static char        text[BUFSIZ];
        int i;
       
        /*
         *        windows下使用socket必须用WSAStartup初始化,否则不能调用
         */
        if(WSAStartup(MAKEWORD(2,2), &WSAData))
        {
                printf("WSA failed\n");
                return;
        }
       
        /*
         *        分离url中的主机地址和相对路径
         */
        strcpy(myurl, url);
        for (pHost = myurl; *pHost != '/' && *pHost != '\0'; ++pHost);
        if ( (int)(pHost - myurl) == strlen(myurl) )
                strcpy(GET, "/");
        else
                strcpy(GET, pHost);
        *pHost = '\0';
        strcpy(host, myurl);
        printf("%s\n%s\n", host, GET);

        /*
         *        设定socket参数,并未真正初始化
         */
        sockfd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
        pURL = gethostbyname(host);
        addr.sin_family = AF_INET;
        addr.sin_addr.s_addr = *((unsigned long*)pURL->h_addr);
        addr.sin_port = htons(80);

        /*
         *        组织发送到web服务器的信息
         *        为何要发送下面的信息请参考HTTP协议的约定
         */
        strcat(header, "GET ");
        strcat(header, GET);
        strcat(header, " HTTP/1.1\r\n");
        strcat(header, "HOST: ");
        strcat(header, host);
        strcat(header, "\r\nConnection: Close\r\n\r\n");
       
        /*
         *        连接到服务器,发送请求header,并接受反馈(即网页源代码)
         */
        connect(sockfd,(SOCKADDR *)&addr,sizeof(addr));
       
        send(sockfd, header, strlen(header), 0);
       
        while ( recv(sockfd, text, BUFSIZ, 0) > 0)
        {       
                printf("%s", text);
                strnset(text, '\0', BUFSIZ);
        }

        closesocket(sockfd);
       
        WSACleanup();
}

int main()
{
        char        url[256];
        printf("http://");
        scanf("%s", url);
        geturl(url);
        return 0;
}

阅读(432) | 评论(0) | 转发(0) |
0

上一篇:python网络编程

下一篇:python字符串操作

给主人留下些什么吧!~~