首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于c++中的https请求,recv()未接收到数据

对于c++中的https请求,recv()未接收到数据
EN

Stack Overflow用户
提问于 2013-06-22 03:14:45
回答 1查看 336关注 0票数 0

我是套接字编程的新手。我正在尝试创建一个HTTPS网站的套接字。套接字已成功创建,我可以使用并发送标头进行连接...但是作为来自recv()的响应,我没有得到头部响应,也没有得到-1……程序在那里被阻止了.该站点已为https打开端口443 ...

代码语言:javascript
复制
#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;
}

提前感谢:)

EN

回答 1

Stack Overflow用户

发布于 2013-06-22 03:20:51

您应该将套接字设置为非阻塞(使用fnctl()),然后查看recv()返回的内容。也可以检查errno。这应该会为您提供更多信息。

参见man2recv()@ http://linux.die.net/man/2/recv

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17242701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档