soket进行http访问

2018-08-01  本文已影响38人  child_cool

1.建立到服务器的TCP连接

/*
*打开Socket,返回socketId,-1表示失败
*/
int socket_open(int IP,int Port,int type){
SOCKET socketId;
 struct sockaddr_in serv_addr;
  int status;
 
 socketId=socket(AF_INET,SOCK_STREAM,0);
 
 if((int)socketId<0)
 {
       printf("[ERROR]Create a socket failed!/n");
       return -1;
 }
 
 memset(&serv_addr,0,sizeof(serv_addr));
 serv_addr.sin_family=AF_INET;
 serv_addr.sin_addr.s_addr = ntohl(IP);
 serv_addr.sin_port = htons((USHORT)Port);
 status=connect(socketId,(struct sockaddr*)&serv_addr,sizeof(serv_addr));
    if(status!=0)
 {
    printf("[ERROR]Connecting failed!/n");
    closesocket(socketId);
    return -1;
 }
 return socketId;
}

/// 开始建立链接,0xC0A80001是192.168.0.1的十六进制写法
int socketId=socket_open(0xC0A80001,808,0); 

2.向服务器发送GET或者POST报文

static const char* protocolHead="GET http://www.xxx.com/index.html HTTP/1.1/n"
     "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*/n"
     "Accept-Language: zh-cn/n"
     "User-Agent:iPanelBrowser/2.0/n"
     "Host: www.xxx.com:80/n"
     "Connection: close/n/n"
send(socketId, protocolHead,strlen(protocolHead),0);

3.接受从服务器返回的报文

struct timeval tm = {0,7};
     fd_set fds_r;
     int status;
     char recvBuf[4096]={‘/0’};
     FD_ZERO(&fds_r);
     FD_SET(socketId,&fds_r);
    
status=select(socketId+ 1, &fds_r, 0, 0, &tm); //socketId在这里是最大的fd
    
     if(status > 0 && FD_ISSET(socketId, &fds_r))
{
         printf("Socket is readable...fd=[%d]/n",socketId);
          recv(socketId,recvBuf,4096,0);
}
上一篇下一篇

猜你喜欢

热点阅读