2016-07-06 46 views
0
void SendHardverInfo(){ 
    DWORD VolumeSerialNumber; 

if (GetVolumeInformation("C:\\", 0, 0, &VolumeSerialNumber, 0, 0, 0, 0) == 0) 
{ 
    return; 
} 

UUID uuid; 

UuidCreateSequential(&uuid); 

SYSTEM_INFO SystemInfo; 

GetSystemInfo(&SystemInfo); 

DWORD ComputerHardwareId1 = VolumeSerialNumber^0x12B586FE; 

DWORD ComputerHardwareId2 = *(DWORD*)(&uuid.Data4[2])^0x5D78A569; 

DWORD ComputerHardwareId3 = ((*(WORD*)(&uuid.Data4[6]) & 0xFFFF) | (SystemInfo.wProcessorArchitecture << 16))^0xF45BC123; 

DWORD ComputerHardwareId4 = ((SystemInfo.wProcessorLevel & 0xFFFF) | (SystemInfo.wProcessorRevision << 16))^0xB542D8E1; 



//SENDSERVER 
WSADATA wsaData; 
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { 
    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); 
if (connect(Socket, (SOCKADDR*)(&SockAddr), sizeof(SockAddr)) != 0){ 

    return; 
} 


char Text[256]; 
ZeroMemory(Text, sizeof(Text)); 
sprintf(Text, "%08X-%08X-%08X-%08X", ComputerHardwareId1, ComputerHardwareId2, ComputerHardwareId3, ComputerHardwareId4); 

char link[500]; 
strcat(link, "GET /api/hardverinfo.php?hardverinfo="); 
strcat(link, Text); 
strcat(link, " HTTP/1.1\r\nHost: www.mysite.com\r\nConnection: close\r\n\r\n"); 

send(Socket, link, strlen(link), 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') { 
     i += 1; 
    } 
} 

closesocket(Socket); 
WSACleanup(); 

printf(link); 
return; 
//ENDSEND 
} 

嗨我有这个代码,它的工作和良好。但是,在我向网站发送GET请求之后,比我想要处理的答案要多,例如在get完成后,网站给出确定,我想在我的应用程序中处理这个问题,我该怎么做?C++发送数据到PHP并处理响应

+0

为什么不开始向我们展示您迄今为止所做的工作? –

回答

1

的GET请求标题改成这样

" HTTP/1.1\r\nHost: www.mysite.com\r\nContent-type: application/x-www-form-urlencoded\r\n\r\n"; 

,而不是在最后的报头部分。这应该强制你的php服务器以可读的格式响应你的应用程序。

+0

HTTP/1.1 200 OK 日期:星期三,2016年7月6日18时58分06秒GMT 的Content-Type:text/html的 的Content-Length:0 连接:关闭 的Set-Cookie:__cfduid = d6196ca171eec28bbcc68a393b698107b1467831486;到期=星期四,06年7月6日18:58:06 GMT;路径= /;域= .mysite.com;仅Http 服务器:CloudFlare的-nginx的 CF-RAY:2be549487a812be2-AMS 我回来了这一点,而不是PHP文件的回声值,这是为什么呢? – Vbnetguy

+0

如果我把缓冲区写入一个文本文件recv我得到了上限,如果我把recv放入fprint,我得到这个:<˙U<ěěS3Ű=HpÉu).ÇuV... – Vbnetguy

+0

尝试删除所有标题我做到了。那么你的服务器响应是什么。 – DualCore