socket http通信

来源:互联网 发布:咸阳软件培训学校 编辑:程序博客网 时间:2024/06/08 02:10

1.主要函数

--------struct hostent*gethostbyname(char *host);    //用于主机解析,返回 struct hostent*指针 

        --------int socket();                   //生成一个socket对象

        --------int connect();              //连接server端

       ---------read()/write;              //读写socket

2.http协议主要格式

strcat(message,"GET / HTTP/1.1\r\n");
strcat(message,"Accept: text/html\r\n");
strcat(message,"Host: www.baidu.com\r\n");
strcat(message,"User-Agent: Mozilla/5.0(compatible)\r\n");
strcat(message,"Connection: Keep-Alive\r\n");
strcat(message,"\r\n");




3.代码实现

 #include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>


void * msg_handler(void *serv_fd)
{
    puts("aa*****");
    char buf[100]={0};
    while(read((int)serv_fd,buf,sizeof(buf)))
    {
    }


        puts(buf);
    return (void *)0;
}


int main()
{
    int serv_fd;
    char *hostname = "www.baidu.com";
    char message[150]={0};


    if((serv_fd=socket(AF_INET,SOCK_STREAM,0)) < 0)
    {
        perror("socket");
        goto err_socket;
    }


    struct hostent *p = NULL;


    p = gethostbyname(hostname);
                                                      

  

   if( p == NULL )
   {
       perror("error");
       puts("error");
       fflush(stdout);
   }


   puts("here");


   if(*(p->h_addr_list) != NULL)
   {
       puts("*");
       puts(inet_ntoa(*((struct in_addr *)(*(p->h_addr_list)))));
       p->h_addr_list++;
   }
   struct sockaddr_in attr ={
       .sin_family = AF_INET,
       .sin_port = htons(80),
   /*  .sin_addr = {
           .s_addr =  *(p->h_addr),
           */
       .sin_addr =  *((struct in_addr*)(p->h_addr)),


   };


   strcat(message,"GET / HTTP/1.1\r\n");
   strcat(message,"Accept: text/html\r\n");
   strcat(message,"Host: www.baidu.com\r\n");
   strcat(message,"User-Agent: Mozilla/5.0(compatible)\r\n");
   strcat(message,"Connection: Keep-Alive\r\n");
   strcat(message,"\r\n");
   puts(message);
   if(connect(serv_fd,(struct sockaddr*)&attr,sizeof(attr)) == -1)
   {
       perror("connect");

          goto err_socket;
   }
   int i=0;
   //while(1)
   for(i=0;i<2;i++)
   {
   if((write(serv_fd,message,strlen(message))) < 0)
   {
       perror("write");
       goto err_socket;
   }


   char buf[10000]={0};
   int len =0;


   if((len =read(serv_fd,buf,sizeof(buf))) < 0)
   {
       perror("read");
       goto err_socket;
   }
/  if(read())
   printf("%d\n",len);
   puts(buf);
   puts(buf+400);
   }
*
   int ip = inet_addr("192.168.0.25");
   attr.sin_addr.s_addr = *(p->h_addr);
   puts(p->h_name);
   puts((inet_ntoa(attr.sin_addr)));
/


/  if()    
 return 0;

err_socket:
  return -1;
}


                                                                            

原创粉丝点击