首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

为什么请求回来的是乱码呢?codeblocks里面编译的

2013-04-02 
为啥请求回来的是乱码呢?codeblocks里面编译的/*******************************************************

为啥请求回来的是乱码呢?codeblocks里面编译的


/*****************************************************************/
/*********** 程序名称:get_http.c ********************************/
/*********** 功能:向固定地址发起请求得到返回页面字符 ************/
/*********** 作者:YZW  ******************************************/
/*********** 时间:2010-10-28 ************************************/
/*****************************************************************/


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>


int htconnect(char *host, int port){
        int white_sock;
        struct hostent * site;
        struct sockaddr_in me;
        site = gethostbyname(host);
        if (site==NULL) return -2;
        white_sock = socket(AF_INET,SOCK_STREAM,0);
        if (white_sock <0) return -1;
        memset(&me, 0, sizeof(struct sockaddr_in));
        memcpy(&me.sin_addr, site-> h_addr_list[0], site-> h_length);
        me.sin_family = AF_INET;
        me.sin_port = htons(port);
        return (connect(white_sock, (struct sockaddr *)&me,sizeof(struct sockaddr)) <0) ? -1 : white_sock;
}

int htsend(int sock, char *fmt, ...){
        char BUF[1024];
        va_list argptr;
        va_start(argptr,fmt);
        vsprintf(BUF,fmt,argptr);
        va_end(argptr);
        //printf(BUF);  //回显
        //printf("-->%s<--\n",BUF);
        return send(sock,BUF,strlen(BUF),0);
}


int main(int argc,char **argv){
        int black_sock;
        int M,N;
        char bugs_bunny[3];
       // if (argc<2){
           //     printf( "Please input the hostName. Example:\n %s www.sohu.com\n ",argv[0]);
             //   return;
       // }
       char *host_name = "www.sohu.com";
        black_sock = htconnect(host_name,80);
        if (black_sock <1) return;

        printf("循环发送请求开始\n");
        printf("......\n");


        M=1;N=1;
        while (N==1){
                if(M % 1000 == 0){printf("当前循环次数:%d \n",M);      }
                if(M == 10000){break;}
                htsend(black_sock, "GET / HTTP/1.0\n");
                htsend(black_sock, "Host: %s\n", host_name);
                htsend(black_sock, "\n");
                //htsend(black_sock, "%c ", 10);
                M++;                            
        }
        printf("循环发送请求 %d 次\n",M);

        printf("收到信息Start:---->\n");
        while (read(black_sock, bugs_bunny, 1)> 0){
             printf( "%c",bugs_bunny[0]);
        }
        printf( "收到信息End.<----\n ");
        close(black_sock);
}


[解决办法]
编码问题? 目标网站返回的是什么编码
[解决办法]
对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode:0x4A 0x55,UTF-8:0xE5 0x95 0x8A

热点排行
Bad Request.