Php HTTP请求C++;功能不总是提交请求(很少) 我有一个C++中的HTTP PASSO数据函数,用于向Web服务器发送HTTP请求。

Php HTTP请求C++;功能不总是提交请求(很少) 我有一个C++中的HTTP PASSO数据函数,用于向Web服务器发送HTTP请求。,php,c++,sockets,http,winapi,Php,C++,Sockets,Http,Winapi,大约每50次尝试中就有1次,请求实际上会通过,其他时候,请求不会被发送 我不知道为什么,但它应该经历100%的时间。以下是我的post_数据函数: 我不使用HTTP库的原因之一是因为几个月前我无法让它们工作 std::string MasterServerHandler::post_data(std::string file, std::string data){ string request; string response; int resp_leng; c

大约每50次尝试中就有1次,请求实际上会通过,其他时候,请求不会被发送

我不知道为什么,但它应该经历100%的时间。以下是我的post_数据函数:

我不使用HTTP库的原因之一是因为几个月前我无法让它们工作

std::string MasterServerHandler::post_data(std::string file, std::string data){
    string request;
    string response;
    int resp_leng;

    char buffer[BUFFERSIZE];
    struct sockaddr_in serveraddr;
    int sock;

    WSADATA wsaData;
    const char* ipaddress  = cst::masterIP.c_str();
    std::string host = cst::masterHost;

    int port = 80;

    request+="GET /folder/" + string(file) + data + " HTTP/1.0\r\n";
    request+="Host: " + host + "\r\n";
    request+="\r\n";
     //open socket


    if ((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
        cout << "WEB socket() failed" << endl;

    //connect
    memset(&serveraddr, 0, sizeof(serveraddr));
    serveraddr.sin_family      = AF_INET;
    serveraddr.sin_addr.s_addr = inet_addr(ipaddress);
    serveraddr.sin_port        = htons((unsigned short) port);
    if (connect(sock, (struct sockaddr *) &serveraddr, sizeof(serveraddr)) < 0)
        cout << "WEB connect() failed" << endl;

    //send request
    if (send(sock, request.c_str(), request.length(), 0) != request.length())
        cout << "WEB send() sent a different number of bytes than expected" << endl;;

    //If we care about the response
        //get response
        response = "";
        resp_leng= BUFFERSIZE;
        while (resp_leng == BUFFERSIZE)
        {
            resp_leng= recv(sock, (char*)&buffer, BUFFERSIZE, 0);
            if (resp_leng>0)
                response+= string(buffer).substr(0,resp_leng);
            //note: download lag is not handled in this code
        }

   //disconnect
   closesocket(sock);

   return response;

}
它只是永远循环。这可能是因为PHP端的连接没有关闭,但我没有循环 在我的PHP脚本上运行,所以这不可能


真的很困惑为什么这不起作用。

为什么不直接使用它?它实际上是在循环,还是代码在等待阻塞
recv
返回?你检查错误,这很好,但当出现错误时你实际上什么都不做,你只是继续,就好像什么都没发生一样。你甚至没有报告错误是什么。为什么你一直删除并重新发布同一个问题?这变得很烦人。在一个不相关的注释中,您知道有一个可以指定缓冲区及其长度的名称吗?例如
response+=std::string(缓冲区,响应长度)。目前,仅对构造函数使用
缓冲区
,将导致未定义的行为,除非您接收的数据以零结尾。
while (resp_leng > 0)