繁体   English   中英

C ++使用GET发送数据

[英]C++ send data with GET

我有此代码,并且遇到了以下问题:错误1错误C2110:'+':无法添加两个指针2 IntelliSense:表达式必须具有整数或无作用域的枚举类型

我正在尝试使用m_AccountID变量数据将数据获取到test.php文件,我尝试了很多事情,但是遇到了这两个错误。

有解决的办法吗?

void ConnectEx::SendDataPHP(){
    WSADATA wsaData;
    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
        //cout << "WSAStartup failed.\n";
        //system("pause");
        return;
    }
    SOCKET Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    struct hostent *host;
    host = gethostbyname("www.mysite.com");
    SOCKADDR_IN SockAddr;
    SockAddr.sin_port = htons(80);
    SockAddr.sin_family = AF_INET;
    SockAddr.sin_addr.s_addr = *((unsigned long*)host->h_addr);
    //cout << "Connecting...\n";
    if (connect(Socket, (SOCKADDR*)(&SockAddr), sizeof(SockAddr)) != 0){
        //cout << "Could not connect";
        //system("pause");
        return;
    }

    //cout << "Connected.\n";

    send(Socket, "GET /api/test.php?username=" +m_AccountID+ "HTTP/1.1\r\nHost: www.mysite.com\r\nConnection: close\r\n\r\n", strlen("GET /api/test.php?username="+m_AccountID+ "HTTP/1.1\r\nHost: www.mysite.com\r\nConnection: close\r\n\r\n"), 0);
char buffer[10000];
int nDataLength;
while ((nDataLength = recv(Socket, buffer, 10000, 0)) > 0){
    int i = 0;
    while (buffer[i] >= 32 || buffer[i] == '\n' || buffer[i] == '\r') {
        //cout << buffer[i];
        i += 1;
    }
}
closesocket(Socket);
WSACleanup();
//system("pause");
    return;

}

class ConnectEx
{
public:
    void    SendDataPHP();
.
.
.
.
    char    m_AccountID[11];
.
.
.


}; extern ConnectEx gConnectEx;

只需将其连接到字符串即可:

send( Socket ,
      std::string( "GET /api/test.php?username=" + m_AccountID + " HTTP/1.1\r\nHost: www.mysite.com\r\nConnection: close\r\n\r\n" ).c_str( ) , 
      strlen("GET /api/test.php?username=" + m_AccountID + " HTTP/1.1\r\nHost: www.mysite.com\r\nConnection: close\r\n\r\n") , 0);

演示版

另外,如果您只是在之后重复该字符串,请先将其保存到变量中,以便您可以重复使用它。 而且我不建议使用std::strlen因为它很旧。

而是这样做:

std::string m_AccountID;
std::string data;


m_AccountID = "12345";
data        = "GET /api/test.php?username=" + m_AccountID + " HTTP/1.1\r\nHost: www.mysite.com\r\nConnection: close\r\n\r\n"

send( Socket , data.c_str( ) , data.size( ) , 0 );

char m_AccountID[11]; 应该是std::string m_AccountID;

您的代码现在应该看起来像这样:

void ConnectEx::SendDataPHP(){
    WSADATA wsaData;
    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
        //cout << "WSAStartup failed.\n";
        //system("pause");
        return;
    }
    SOCKET Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    struct hostent *host;
    host = gethostbyname("www.mysite.com");
    SOCKADDR_IN SockAddr;
    SockAddr.sin_port = htons(80);
    SockAddr.sin_family = AF_INET;
    SockAddr.sin_addr.s_addr = *((unsigned long*)host->h_addr);
    //cout << "Connecting...\n";
    if (connect(Socket, (SOCKADDR*)(&SockAddr), sizeof(SockAddr)) != 0){
        //cout << "Could not connect";
        //system("pause");
        return;
    }

    //cout << "Connected.\n";

    send(Socket, std::string( "GET /api/test.php?username=" +m_AccountID+ "HTTP/1.1\r\nHost: www.mysite.com\r\nConnection: close\r\n\r\n" ).c_str( ) , strlen("GET /api/test.php?username="+m_AccountID+ "HTTP/1.1\r\nHost: www.mysite.com\r\nConnection: close\r\n\r\n"), 0);
char buffer[10000];
int nDataLength;
while ((nDataLength = recv(Socket, buffer, 10000, 0)) > 0){
    int i = 0;
    while (buffer[i] >= 32 || buffer[i] == '\n' || buffer[i] == '\r') {
        //cout << buffer[i];
        i += 1;
    }
}
closesocket(Socket);
WSACleanup();
//system("pause");
    return;

}

class ConnectEx
{
public:
    void    SendDataPHP();
.
.
.
.
    std::string m_AccountID;
.
.
.


}; extern ConnectEx gConnectEx;

确保您还#include <string>

现在,我做到了,我使用strcat合并了变量,而不是将其放入send及其工作中。 谢谢您的帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM