• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Onway

            我是一只菜菜菜菜鳥...
            posts - 61, comments - 56, trackbacks - 0, articles - 34

            goldendict的網頁版有道詞典,失敗了!

            Posted on 2012-03-17 17:38 Onway 閱讀(1231) 評論(0)  編輯 收藏 引用 所屬分類: 碼兒快跑
            其實在瀏覽器看到是正常的,但是通過goldendict訪問就不行了,主要表現是導航條工作不正常,不能隱藏,和頁面底下出現的一大片空白。如圖:
             




            /Files/Onway/eyoudao-web.tar.gz.rar


            gyd-server.c
            #include <sys/types.h>
            #include 
            <sys/socket.h>
            #include 
            <sys/stat.h>
            #include 
            <unistd.h>
            #include 
            <stdio.h>
            #include 
            <stdlib.h>
            #include 
            <string.h>
            #include 
            <arpa/inet.h>
            #include 
            <fcntl.h>
            #include 
            <pthread.h>

            #define PROT 10000
            #define ADDRESS "127.0.0.1"
            #define BACKLOG 20
            #define BUFSIZE 4096

            /*    互斥量,用于各個線程的標準輸出    */
            pthread_mutex_t 
            lock = PTHREAD_MUTEX_INITIALIZER;
            struct clientinfo
            {
                
            int sockfd;    /*    客戶端套接字    */
                
            int sockno;    /*    客戶端請求順序號    */
            };

            int create_server_socket();
            void* handle_request(void*);
            int send_dynamic(struct clientinfo*,char*);    /*    通過dynamic.bash返回的結果    */
            int send_static(struct clientinfo*,char*);    /*    直接讀文件發送    */
            void print_msg(int,const char*);            /*    標準輸出    */


            int
            main(
            int argc,char *argv[])
            {
                
            int serverfd;
                
            int count = 0;
                pthread_t ptid;
                
            struct clientinfo *cinfo;

                
            /*    創建監聽套接字    */
                serverfd 
            = create_server_socket();
                
            if (serverfd == -1) {
                    printf(
            "main(): terminate\n");
                    
            return -1;
                }

                
            while (1) {
                    cinfo 
            = (struct clientinfo*) malloc (sizeof(struct clientinfo));
                    cinfo
            ->sockfd = accept(serverfd,NULL,NULL);
                    cinfo
            ->sockno = ++count;
                    pthread_create(
            &ptid,NULL,handle_request,(void*)cinfo);
                }

                
            return 0;
            }

            int 
            create_server_socket()
            {
                
            int tmpfd = socket(AF_INET,SOCK_STREAM,0);
                
            if (tmpfd == -1) {
                    printf(
            "create_server_socket(): socket error\n");
                    
            return -1;
                }

                
            struct sockaddr_in svraddr;
                bzero(
            &svraddr,sizeof(svraddr));
                svraddr.sin_family 
            = AF_INET;
                svraddr.sin_port 
            = htons(PROT);
                svraddr.sin_addr.s_addr 
            = inet_addr(ADDRESS);

                
            if (bind(tmpfd,(struct sockaddr*)&svraddr,sizeof(svraddr)) == -1) {
                    printf(
            "create_server_socket(): bind error\n");
                    
            return -1;
                }

                
            if (listen(tmpfd,BACKLOG) == -1) {
                    printf(
            "create_server_socket(): listen error\n");
                    
            return -1;
                }
                
                
            return tmpfd;
            }

            void*
            handle_request(
            void *info)
            {
                
            struct clientinfo *cinfo = (struct clientinfo*) info;
                
            char receive[BUFSIZE << 1= "";
                
            char method[BUFSIZE] = "",request[BUFSIZE] = "";
                
            char header[] = "HTTP/1.1 200 OK\r\nconnection:close\r\n\r\n";
                
            int i;

                
            if (recv(cinfo->sockfd,receive,BUFSIZE << 1,0< 0) {
                    print_msg(cinfo
            ->sockno,"handle_request(): recv error");
                    
            return ( (void*0);
                }
                
            /*    回應報頭    */
                write(cinfo
            ->sockfd,header,strlen(header));

                
            /*    請求方法和參數的簡單檢測    */
                sscanf(receive,
            "%s%s",method,request);
                
            if (strcmp(method,"GET")) {
                    print_msg(cinfo
            ->sockno,"handle_request(): method is not GET");
                    
            return ( (void*0);
                }

                
            if (strlen(request) < 8) {
                    print_msg(cinfo
            ->sockno,"handle_request(): unknow request");
                    
            goto end;
                }
                print_msg(cinfo
            ->sockno,receive);

                
            /*    請求dynamic.bash    */
                
            if (strncmp(request,"/action?",8== 0) {
                    send_dynamic(cinfo,request);
                    
            goto end;
                }
                send_static(cinfo,request);

            end:
                close(cinfo
            ->sockfd);
                free(cinfo);
                
            return ( (void*0);
            }

            int
            send_static(
            struct clientinfo *cinfo,char *request)
            {
                
            int len = strlen(request);
                
            char path[1024],buf[BUFSIZE];
                
            int fd,bytes;
                
            /*    忽略開頭的'/'符號    */
                sscanf(request,
            "%*c%s",path);
                
                
            /*    文件讀取    */
                fd 
            = open(path,O_RDONLY);
                
            if (fd == -1) {
                    print_msg(cinfo
            ->sockno,"send_static(): open error");
                    
            return 1;
                }
                
            while ((bytes = read(fd,buf,4096)) > 0) {
                    write(cinfo
            ->sockfd,buf,bytes);
                }
                close(fd);
                
            return 0;
            }

            int
            send_dynamic(
            struct clientinfo *cinfo,char *request)
            {
                
            char cmd[BUFSIZE],arg[1024],line[BUFSIZE];
                FILE 
            *fpin;
                
            /*    忽略action?    */
                sscanf(request,
            "%*[^?]%*c%s",arg);
                sprintf(cmd,
            "./dynamic.bash \"%s\"",arg);

                
            /*    從popen返回的FILE指針讀取內容發送    */
                
            int cnt = 0;
                
            if ((fpin = popen(cmd,"r")) == NULL) {
                    print_msg(cinfo
            ->sockno,"send_dynamic(): popen error");
                    
            return 1;
                }
                
            while (fgets(line,BUFSIZE,fpin) != NULL) {
                    write(cinfo
            ->sockfd,line,strlen(line));
                }
                pclose(fpin);
                
            return 0;
            }

            void
            print_msg(
            int no,const char *msg)
            {
                pthread_mutex_lock(
            &lock);
                printf(
            "request: %d\n%s\n\n",no,msg);
                pthread_mutex_unlock(
            &lock);
            }

            dynamic.bash
            #!/bin/bash

            xmldetail
            ="http://dict.youdao.com/search?keyfrom=deskdict.main&xmlDetail=true&doctype=xml&xmlVersion=7.1&dogVersion=1.0&client=deskdict&appVer=5.0.32.4695&xslVer=3.0&q="
            xsldetail
            ="detail/result.xsl"
            xmlsimple
            =""
            xslsimple
            =""

            check_in_book() {
                # 截斷開頭結尾的空格,將中間的連續空格換成一個空格
                word
            ="`echo $1 | sed 's/^\(%20\)\+//g' | sed 's/\(%20\)\+$//g' | sed 's/\(%20\)\+/ /g'`"
                cut 
            -';' -1 wordsbook | grep -"^$word$"
                [ $
            ? == 0 ] && echo 1 || echo 0
            }

            add_to_book() {
                word
            ="`echo $1 | sed 's/^\(%20\)\+//g' | sed 's/\(%20\)\+$//g' | sed 's/\(%20\)\+/ /g'`"
                t
            ="`date +'%y-%m-%d %H:%M'`"
                echo 
            "$word;$t;" >> wordsbook
                echo 
            1
            }

            send_response() {
                # $1為:inbook
            =queryword或者detail=queryword等形式
            action
            =${1%=*}
            target
            =${1#*=}

            case $action in
                
            "inbook")
                    check_in_book 
            "$target"
                    ;;
                
            "tobook")
                    add_to_book 
            "$target"
                    ;;
                
            "detail")
                    .
            /xslt "-xmlapi" "$xmldetail" "-xslapi" "$xsldetail" "-keyword" "$target" | sed '$d' 
                    ;;
                
            "simple")
                    ;;
                
            *)
                    exit 
            1
                    ;;
            esac
            }

            send_response 
            "$1"
            exit 
            0
            国产精品久久久久9999| 久久国产精品波多野结衣AV| 午夜精品久久久久成人| 国产免费久久精品99久久| 亚洲国产精品久久久久婷婷软件 | 久久国产乱子精品免费女| 久久丫忘忧草产品| 久久免费看黄a级毛片| 午夜精品久久久久9999高清| 亚洲欧美日韩精品久久亚洲区| 久久久久久久综合日本| 久久国产精品免费一区二区三区| AA级片免费看视频久久| 一本久久久久久久| 国内精品伊人久久久久网站| 精品免费久久久久国产一区| 久久久久亚洲av成人无码电影| 久久精品三级视频| 久久人人爽人人人人片av| 久久精品国产亚洲av影院| 久久国产亚洲精品麻豆| 精品久久久久久无码中文野结衣| 性高朝久久久久久久久久| 国产成年无码久久久免费| 精品久久人妻av中文字幕| 精品国产乱码久久久久久浪潮| 久久中文字幕视频、最近更新| 国产aⅴ激情无码久久| 亚洲一区中文字幕久久| 久久久无码精品午夜| 人妻无码αv中文字幕久久琪琪布| 东京热TOKYO综合久久精品| 久久国产成人午夜AV影院| 精品无码久久久久国产动漫3d| 青青青伊人色综合久久| 欧美精品九九99久久在观看| 久久人人爽人人爽人人AV| 久久精品国产第一区二区| 久久久久亚洲AV片无码下载蜜桃| 久久九九免费高清视频| 久久精品国产99久久久|