Php HTTP请求C++;功能不总是提交请求(很少) 我有一个C++中的HTTP PASSO数据函数,用于向Web服务器发送HTTP请求。
大约每50次尝试中就有1次,请求实际上会通过,其他时候,请求不会被发送 我不知道为什么,但它应该经历100%的时间。以下是我的post_数据函数: 我不使用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
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)