Adesso sembra funzionare
Ho preso spunto da codice in rete e l'ho modificato un po.
Vi posto il codice:
codice:
/*
** httpGET.cpp -- a stream socket HTTP client demo
*/
/*Uncomment for your system*/
/*#define LINUX 1*/
#define WINDOWS 1
#pragma comment (lib, "Ws2_32.lib")
#ifdef LINUX
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#endif
#ifdef WINDOWS
#include <winsock.h>
#include <stdio.h>
#endif
#define PORT 80 // the port client will be connecting to
#define MAXDATASIZE 1024 // max number of bytes we can get at once
#define HTTP_GET "GET %s HTTP/1.1\nHost: %s\n\n"
void DieWithError(char *errorMessage)
{
printf("%s\n",errorMessage);
exit(1);
}
int main(int argc, char *argv[])
{
#ifdef WINDOWS
WSADATA wsaData;
#endif
int sockfd, numbytes, length;
char buf[MAXDATASIZE];
char request[250];
char *response = "";
struct hostent *he;
struct sockaddr_in their_addr; // connector's address information
char *url = "localhost";
char *params = "/memGetParams/memGetParams.php?p=pippo&m=ciao";
#ifdef WINDOWS
if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0) {
DieWithError("WSAStartup failed.\n");
}
#endif
if ((he=gethostbyname(url)) == NULL) { // get the host info
DieWithError("gethostbyname");
}
if ((sockfd = socket(PF_INET, SOCK_STREAM, 0)) == -1) {
DieWithError("socket");
}
their_addr.sin_family = AF_INET; // host byte order
their_addr.sin_port = htons(PORT); // short, network byte order
their_addr.sin_addr = *((struct in_addr *)he->h_addr);
memset(their_addr.sin_zero, '\0', sizeof their_addr.sin_zero);
if (connect(sockfd, (struct sockaddr *)&their_addr, sizeof their_addr) == -1) {
DieWithError("connect");
}
sprintf(request, HTTP_GET, params, url);
if ((numbytes=send(sockfd, request, strlen(request), 0)) == -1) {
DieWithError("send");
}
if ((numbytes=recv(sockfd, buf, MAXDATASIZE-1, 0)) == -1) {
DieWithError("recv");
}
buf[numbytes] = '\0';
sscanf(buf, "Content-Length: %d", &length);
response = (char*)malloc(sizeof(char)*length);
for(; numbytes < length; numbytes += recv(sockfd, buf, MAXDATASIZE-1, 0)){
strcat(response, buf);
buf[numbytes] = '\0';
}
printf("%s\n",response);
free(response);
#ifdef LINUX
close(sockfd);
#else
WSACleanup();
#endif
return 0;
}
Il codice compila e si esegue, ma l'output di debug di vc++ mi da:
codice:
'httpGET.exe': caricato 'D:\projectVisualC++\httpGET\Debug\httpGET.exe', Simboli caricati.
'httpGET.exe': caricato 'C:\Windows\System32\ntdll.dll', Impossibile trovare o aprire il file PDB
'httpGET.exe': caricato 'C:\Windows\System32\kernel32.dll', Impossibile trovare o aprire il file PDB
'httpGET.exe': caricato 'C:\Windows\System32\KernelBase.dll', Impossibile trovare o aprire il file PDB
'httpGET.exe': caricato 'C:\Windows\System32\ws2_32.dll', Impossibile trovare o aprire il file PDB
'httpGET.exe': caricato 'C:\Windows\System32\msvcrt.dll', Impossibile trovare o aprire il file PDB
'httpGET.exe': caricato 'C:\Windows\System32\rpcrt4.dll', Impossibile trovare o aprire il file PDB
'httpGET.exe': caricato 'C:\Windows\System32\nsi.dll', Impossibile trovare o aprire il file PDB
'httpGET.exe': caricato 'C:\Windows\System32\msvcr100d.dll', Simboli caricati.
'httpGET.exe': caricato 'C:\Windows\System32\nlaapi.dll', Impossibile trovare o aprire il file PDB
'httpGET.exe': caricato 'C:\Windows\System32\NapiNSP.dll', Impossibile trovare o aprire il file PDB
'httpGET.exe': caricato 'C:\Windows\System32\sechost.dll', Impossibile trovare o aprire il file PDB
'httpGET.exe': caricato 'C:\Windows\System32\pnrpnsp.dll', Impossibile trovare o aprire il file PDB
'httpGET.exe': caricato 'C:\Windows\System32\mswsock.dll', Impossibile trovare o aprire il file PDB
'httpGET.exe': caricato 'C:\Windows\System32\user32.dll', Impossibile trovare o aprire il file PDB
'httpGET.exe': caricato 'C:\Windows\System32\gdi32.dll', Impossibile trovare o aprire il file PDB
'httpGET.exe': caricato 'C:\Windows\System32\lpk.dll', Impossibile trovare o aprire il file PDB
'httpGET.exe': caricato 'C:\Windows\System32\usp10.dll', Impossibile trovare o aprire il file PDB
'httpGET.exe': caricato 'C:\Windows\System32\imm32.dll', Impossibile trovare o aprire il file PDB
'httpGET.exe': caricato 'C:\Windows\System32\msctf.dll', Impossibile trovare o aprire il file PDB
'httpGET.exe': caricato 'C:\Program Files\Windows Searchqu Toolbar\Datamngr\datamngr.dll', Impossibile trovare o aprire il file PDB
'httpGET.exe': caricato 'C:\Windows\System32\wtsapi32.dll', Impossibile trovare o aprire il file PDB
'httpGET.exe': caricato 'C:\Windows\System32\advapi32.dll', Impossibile trovare o aprire il file PDB
'httpGET.exe': caricato 'C:\Windows\System32\dbghelp.dll', Impossibile trovare o aprire il file PDB
'httpGET.exe': scaricato 'C:\Program Files\Windows Searchqu Toolbar\Datamngr\datamngr.dll'
'httpGET.exe': scaricato 'C:\Windows\System32\dbghelp.dll'
'httpGET.exe': scaricato 'C:\Windows\System32\advapi32.dll'
'httpGET.exe': scaricato 'C:\Windows\System32\wtsapi32.dll'
'httpGET.exe': caricato 'C:\Program Files\Windows Searchqu Toolbar\Datamngr\IEBHO.dll', Impossibile trovare o aprire il file PDB
'httpGET.exe': caricato 'C:\Windows\System32\dbghelp.dll', Impossibile trovare o aprire il file PDB
'httpGET.exe': scaricato 'C:\Program Files\Windows Searchqu Toolbar\Datamngr\IEBHO.dll'
'httpGET.exe': scaricato 'C:\Windows\System32\dbghelp.dll'
'httpGET.exe': caricato 'C:\Windows\System32\dnsapi.dll', Impossibile trovare o aprire il file PDB
'httpGET.exe': caricato 'C:\Windows\System32\winrnr.dll', Impossibile trovare o aprire il file PDB
'httpGET.exe': caricato 'C:\Program Files\Bonjour\mdnsNSP.dll', Impossibile trovare o aprire il file PDB
'httpGET.exe': caricato 'C:\Windows\System32\IPHLPAPI.DLL', Impossibile trovare o aprire il file PDB
'httpGET.exe': caricato 'C:\Windows\System32\winnsi.dll', Impossibile trovare o aprire il file PDB
'httpGET.exe': caricato 'C:\Windows\System32\FWPUCLNT.DLL', Impossibile trovare o aprire il file PDB
'httpGET.exe': caricato 'C:\Windows\System32\rasadhlp.dll', Impossibile trovare o aprire il file PDB
'httpGET.exe': caricato 'C:\Windows\System32\WSHTCPIP.DLL', Impossibile trovare o aprire il file PDB
'httpGET.exe': scaricato 'C:\Windows\System32\WSHTCPIP.DLL'
'httpGET.exe': scaricato 'C:\Windows\System32\nlaapi.dll'
'httpGET.exe': scaricato 'C:\Windows\System32\NapiNSP.dll'
'httpGET.exe': scaricato 'C:\Windows\System32\pnrpnsp.dll'
'httpGET.exe': scaricato 'C:\Windows\System32\winrnr.dll'
'httpGET.exe': scaricato 'C:\Program Files\Bonjour\mdnsNSP.dll'
'httpGET.exe': scaricato 'C:\Windows\System32\FWPUCLNT.DLL'
Il thread 'Thread Win32' (0x194c) è terminato con il codice 0 (0x0).
Il programma '[6372] httpGET.exe: Nativo' è terminato con il codice 0 (0x0).
Chi mi puo spiegare cosa significa "Impossibile trovare o aprire il file PDB"? Se la libreria è richiesta, e non la trova, non dovrebbe dare errore e non funzionare??
Ma l'istruzione #pragma comment (lib, "Ws2_32.lib") cosa fa in pratica? Forse dipende da questo la cosa di prima?
Un grazie ad oregon per l'aiuto.