2013-06-21 22 views
0

我是套接字编程的新手。我正在尝试创建一个HTTPS网站的套接字。套接字创建成功,我能够连接使用和发送标题...但作为来自recv()的回应我没有得到任何标题响应既没有我得到-1 ...程序只是阻止那里..该网站有HTTPS打开端口443 ......没有数据收到recv()为https请求在c + +

#include<iostream> 
#include<cstring> 
#include<sys/socket.h> 
#include<netdb.h> 
using namespace std; 
int main() 
{ 
    int status; 
    struct addrinfo hostInfo; 
    struct addrinfo *hostList; 
    memset(&hostInfo, 0, sizeof(hostInfo)); 
    hostInfo.ai_family = AF_INET;  
     hostInfo.ai_socktype = SOCK_STREAM; 
    cout<<"Setting up the structs..."<<endl; 
    status = getaddrinfo("academics.vit.ac.in", "https", &hostInfo, &hostList); 
    if(status == 0) 
    { 
     cout<<"Success"<<endl; 
     //cout<<hostList->ai_addr<<" "<<hostList->ai_socktype; 
    } 
    else 
    { 
     cout<<"Failled!"; 
    } 
    int socketd; 
    socketd = socket(hostList->ai_family, hostList->ai_socktype, hostList->ai_protocol); 
    if(socketd == -1) 
    { 
     cout<<"Socket Error\n"; 
    } 
    else 
    { 
     cout<<"Socket Success\n"; 
    } 
    cout<<"Connecting\n"; 
    status = connect(socketd, hostList->ai_addr, hostList->ai_addrlen); 
    if(status == 0) 
    { 
     cout<<"Success"<<endl; 
     //cout<<hostList->ai_addr<<" "<<hostList->ai_socktype; 
    } 
    else 
    { 
     cout<<"Failled!"; 
    } 
    cout<<"\nSending Header\n"; 
    char *msg = "GET /student/stud_login.asp HTTP/1.1\nhost: academics.vit.ac.in\nConnection: keep-alive\nCache-Control: max-age=0\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\nUser-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36\nReferer: https://academics.vit.ac.in/\nAccept-Encoding: gzip,deflate,sdch\nAccept-Language: en-US,en;q=0.8\nCookie: ASPSESSIONIDAWRSBBBS=HJBNNABBBAIADHKAGEFLELJK; ASPSESSIONIDCUTRADBT=GNMNDGBBFDJHBLHABHDGCCOO; ASPSESSIONIDCUQTABAT=IOAAMMNBACANEDJFMGMLMNJA; ASPSESSIONIDAUSQBCAS=GBNFBCOBEKIOJJHFPMJNMJII\n\n"; 
cout<<"\n"<<msg<<endl; 
    int len = strlen(msg); 
    ssize_t msgSize; 
    msgSize = send(socketd, msg, len, 0); 
    if(msgSize == len) 
    { 
     cout<<"Sending Header Successful\n"; 
    } 
    else 
    { 
     cout<<"Error Sending Header\n"; 
    } 
    cout<<"Waiting to recieve data\n"; 
    char rmsg[1000]; 
    msgSize = recv(socketd, rmsg, 10, 0); 
    cout<<msgSize<<rmsg<<endl; 
} 

感谢提前:)

+2

您正在写入期望SSL协议并发送纯文本的服务器端口。您需要使用适当的库来执行协议握手和加密。 –

+0

我相信标准做法是为此使用openssl库。 – Wug

+0

那么这是否意味着我无法直接发送https请求的标头? –

回答

-1

你应该(用fnctl())的插槽设置为非阻塞,然后看看有什么的recv()返回。 检查errno。这应该给你更多的信息。

查看man 2 recv()@http://linux.die.net/man/2/recv

+0

我得到的错误是“资源暂时不可用”... bt同样的事情在函数getaddrinfo我更改“https”到“80” –

相关问题