QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3935|回复: 2

请教:socket发送http请求没有响应?(C语言)

[复制链接]
发表于 2006-11-19 00:46:30 | 显示全部楼层 |阅读模式
我想在Linux下通过socket发送http请求,能连接上服务器,但没有回应,我通过gdb单步执行发现:在同过connect()方法返回的文件描述符fd向服务器端发送请求时(我用的是send()方法,用write()也不行)就没有响应了,请哪位仁兄多多指点。

主要代码如下:(原本不在一个同一个文件中,我把主要代码都摘了出来)
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <strings.h>

#define oops(msg) {perror(msg);exit(1);}
#define HOSTLEN 256
#define DEFAULT_PROTOCAL 0
#define LEN 1024

int ConnectToServer(char * host, int portnum); //连接指定服务器

main()
{
    int fd;
    char buf[LEN];
    int n;
    char* hostname = "dict.cn";       //服务器域名
    char* referer = "http://cn.dict.cn/tools.html";
    char* search = "/ws.php?q=word";   
    char* request = (char*)malloc(LEN * sizeof(char));

    fd = ConnectToServer(hostname, 80);
    if(fd == -1)
        oops("Connect");

    if(sprintf(request, "GET %s HTTP/1.0\r\nAccept:*/*\r\nReferer:%  s\r\n""Host: %s\r\n\r\n",search, referer, hostname) <= 0)
        oops("Request");
    printf("connect to the server %d.\n",fd);

    if(send(fd, request, sizeof(request),0) == -1)
        oops("Send");
    printf("Waiting...");

    while((n = read(fd, buf, LEN)) > 0)
        if(write(1, buf , n) != n)
                oops("Write Result");
}

int ConnectToServer(char * host, int portnum)
{//连接指定服务器
    int sock_fd;
    struct sockaddr_in servaddr;        /*the number to call*/
    struct hostent *hp;

    sock_fd = socket(PF_INET, SOCK_STREAM, DEFAULT_PROTOCAL);
    if(sock_fd == -1)
        return -1;

    bzero((void *)&servaddr, sizeof(servaddr));
    hp = gethostbyname(host);
    if(hp == NULL)
        return -1;

    bcopy((void *)hp->h_addr, (void *)&servaddr.sin_addr, hp->h_length);
    servaddr.sin_port = htons(portnum);
    servaddr.sin_family = AF_INET;

    if(connect(sock_fd, (struct sockaddr *)&servaddr, sizeof   (servaddr)) != 0)
        return -1;

    return sock_fd;
}
 楼主| 发表于 2006-11-19 00:47:41 | 显示全部楼层
不过我的程序中对服务器的访问确实有问题。我用telnet访问服务器dict.cn的80端口后,用GET /ws.php?q=word  HTTP/1.1也没有反应。但我用curl命令访问相应的网页(http://dict.cn/ws.php?q=word)就没有问题,得到了我想要的结果(说明哪个网站是支持这种请求的)。不知道为什么,请高人之教。
回复

使用道具 举报

发表于 2006-11-19 13:11:15 | 显示全部楼层
sizeof(request)=sizeof(char*)=4
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-5-8 14:54 , Processed in 0.076656 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表