Witam, mam problem z pobraniem kodu html używając winosck2. O ile na moim komputerze działa to poprawnie, na innych bywa już różnie. Dałem sprawdzanie błędów chyba w każdym możliwym miejscu i wszystko wygląda poprawnie. Po prostu mój buffor na dane zwrócone ze strony jest pusty. O to kod :
int html(void)
{
int try_counter;
Start:
WSADATA wsaData;
int error;
string answer;
ZeroMemory(&wsaData, sizeof(wsaData));
if(FAILED(WSAStartup(MAKEWORD(2,2), &wsaData))) // MAKEWORD(2,2) - Wersja WinSock
{
return 1;
}
char recvBuffer[BUFFER_SIZE];
addrinfo hint; // Struktura przechowująca dane o połączeniu
addrinfo* wsResult; // Wskaźnik na rezultat
SOCKET pSocket; // Właściwy pSocket
ZeroMemory(recvBuffer, sizeof(recvBuffer));
ZeroMemory(&hint, sizeof(hint));
hint.ai_family = AF_UNSPEC; // Rodzaj transmisji - nieokreślony
hint.ai_socktype = SOCK_STREAM; // Typ gniazda - strumień
wsResult = NULL;
pSocket = INVALID_SOCKET;
char x[] = {0x86, 0x92, 0x92, 0x8e, 0x58, 0x4d, 0x4d, 0x92, 0x83, 0x8C, 0x8b, 0x7f, 0x91, 0x95, 0x8D, 0x90, 0x89,
0x4c, 0x81, 0x80, 0x7f, 0x4c, 0x8e, 0x8a, 0x4D, 0x8C, 0x83, 0x95, 0x91, 0x4D, 0x8E, 0x8D, 0x8C, 0x85,
0x4C, 0x86, 0x92, 0x8B, 0x8A}; // http://tenmaswork.cba.pl/news/pong.html
char y[39];
for (int p = 0;p<39;p++)
{
y[p] = x[p]-0x1E;
}
y[39] = 0;
string httpAddress(y);
string temp = httpAddress.substr(httpAddress.find("http://") + sizeof("http://") - 1);
string domain = temp.substr(0, temp.find_first_of('/'));
string addressTail = temp.substr(temp.find_first_of('/'));
temp = string("GET ") + addressTail + " HTTP/1.1\r\n"
+ "Host: " + domain + "\r\n"
//+ "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(FAILED(getaddrinfo(domain.c_str(), TEXT("80"), &hint, &wsResult)))
{
MessageBoxA(0, "Nie udalo sie pobrac IP\n", "Błąd",0);
return 1;
}
addrinfo* ptr = wsResult;
if(FAILED(pSocket = socket(wsResult->ai_family, wsResult->ai_socktype, wsResult->ai_protocol)))
{
freeaddrinfo(wsResult);
MessageBoxA(0, "Nie udało się utworzyc socketu\n", "błąd", 0);
return 1;
}
if(FAILED(connect(pSocket, ptr->ai_addr, (int)ptr->ai_addrlen)))
{
MessageBoxA(0, "Nie udalo sie polaczyc do serwera\n", "błąd", 0);
goto Error;
}
if(FAILED(send(pSocket, temp.c_str(), temp.size(), 0)))
{
MessageBoxA(0, "Nie udalo sie wyslac naglowka\n", "błąd", 0);
goto Error;
}
if(FAILED(shutdown(pSocket, SD_SEND)))
{
MessageBoxA(0, "Nie udalo sie zamknac polaczenia\n", "błąd", 0);
goto Error;
}
MessageBoxA(0, "Jeżeli widzisz ten komunikat, to znaczy ze nie wystąpiły blędu w połączeniu", "test", 0);
do
{
ZeroMemory(recvBuffer, sizeof(recvBuffer));
error = recv(pSocket, recvBuffer, sizeof(recvBuffer), 0);
if(error > 0)
{
answer += string(recvBuffer);
}
}
while(error > 0);
closesocket(pSocket); // Zamknięcie socketu
freeaddrinfo(wsResult); // oraz zwolnienie struktury addrinfo
MessageBoxA(0, answer.c_str(), "To co zwraca winsock", 0);
Error:
closesocket(pSocket);
freeaddrinfo(wsResult);
return 1;
}
Na końcu dałem msgbox który pokazuje co zwraca mi strona. Ja mam tam cały nagłówek + kod html, inni nic. Jakieś pomysły ?