smart2003 发表于 2006-11-19 00:46:30

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

我想在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;
    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;
}

smart2003 发表于 2006-11-19 00:47:41

不过我的程序中对服务器的访问确实有问题。我用telnet访问服务器dict.cn的80端口后,用GET /ws.php?q=wordHTTP/1.1也没有反应。但我用curl命令访问相应的网页(http://dict.cn/ws.php?q=word)就没有问题,得到了我想要的结果(说明哪个网站是支持这种请求的)。不知道为什么,请高人之教。

daniel_zhy 发表于 2006-11-19 13:11:15

sizeof(request)=sizeof(char*)=4
页: [1]
查看完整版本: 请教:socket发送http请求没有响应?(C语言)