mam pobrac strone internetowa za pomoca socketu i z wykorzystaniem protokolu http jednak moj program zwraca niestety NULL i nie wiem gdzie popelniam blad :/
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <winsock.h>
#include <winsock2.h>
#include <string.h>
void ErrorCode ()
{
int err = WSAGetLastError();
switch (err)
{
}
WSACleanup();
system("pause");
exit(1);
}
int main() {
SOCKET mySocket = INVALID_SOCKET;
int port = 80;
WSADATA wsaData;
WORD version;
struct hostent *adres;
char bufor[2048];
char* d2="213.251.131.44";
char* domena = "www.gamedev.pl";
char* plik = "/articles.php";
char* header;
struct sockaddr_in my_addr, wsResult;
//inicjalizacja socketu
version = MAKEWORD(2,0);
if (WSAStartup(version, &wsaData) != 0)
{
printf("Blad inicjalizacji WSA\n");
ErrorCode();
}
//Tworzenie socketu
mySocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(mySocket == INVALID_SOCKET)
{
printf("Nie mozna stworzyc gniazda\n");
ErrorCode();
}
//wyciaganie ip z adresu
if ((adres=gethostbyname(domena)) == NULL) { // get the host info
printf("Blad gethostbyname()");
//herror("gethostbyname");
exit(1);
}
//d2 = inet_ntoa(*((struct in_addr *)adres->h_addr)));
my_addr.sin_family = AF_INET; // host byte order
my_addr.sin_port = htons(80); // short, network byte order
my_addr.sin_addr = *((struct in_addr *)adres->h_addr);
memset(&(my_addr.sin_zero), 0, 8);
header = "GET /articles.php HTTP/1.1\r\nHost: www.gamedev.pl\r\n\r\n\r\n";
//header = strcat(strcat(strcat(strcat(strcat(strcat("GET ",plik)," HTTP/1.1\r\n"),"Host: "),domena),"\r\n"),"\r\n\r\n");
//printf("%s",header);
//+ "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5\r\n"
//+ "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"
//+ "Accept-Language: pl,en-us;q=0.7,en;q=0.3\r\n"
//+ "Accept-Encoding: gzip,deflate\r\n"
//+ "Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.7\r\n"
//+ "Keep-Alive: 300\r\n"
//+ "Connection: keep-alive\r\n"
//+ "\r\n\r\n";
if(connect(mySocket, (struct sockaddr *)&my_addr, sizeof(struct sockaddr_in)) !=0)
{
printf("Blad conect()\n");
ErrorCode();
}
if(send(mySocket, header, sizeof(header), 0)==-1)
{
printf("Blad Send()\n");
ErrorCode();
}
char* odp;
int error;
//int recv(int sockfd, void *buf, int len, unsigned int flags);
do
{
ZeroMemory(bufor, sizeof(bufor));
error = recv(mySocket, bufor, sizeof(bufor), 0);
if (error ==-1)
{
printf("Blad recv()\n");
ErrorCode();
}
else if(error > 0)
{
odp = strcat(odp,bufor);
}
}while(error > 0);
printf("Received: %s", odp);
close(mySocket);
WSACleanup();
system("pause");
return 0;
}
prawdopodobnie popelniam blad przy odczycie danych ale nie jestem tego pewien