Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef WIN32_LEAN_AND_MEAN
- #define WIN32_LEAN_AND_MEAN
- #endif
- #include "stdafx.h"
- #include "WSockHttp.h"
- #include "ConsoleRedir.h"
- #include <winsock2.h>
- #include <ws2tcpip.h>
- #include <stdio.h>
- #pragma comment(lib, "Ws2_32.lib")
- #define _DEBUG
- int APIENTRY _tWinMain(HINSTANCE hInstance,
- HINSTANCE hPrevInstance,
- LPTSTR lpCmdLine,
- int nCmdShow)
- {
- RedirectIOToConsole();
- //Init WinSocks
- WSADATA wsaData;
- if(int iRet = WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
- {
- _tprintf(TEXT("Error '%d' starting Winsocks: %d\n"), iRet, WSAGetLastError());
- return iRet;
- }
- //Get IP address info of given host
- struct addrinfoW servAddr,
- *pServAddr,
- *pServRes;
- ZeroMemory(&servAddr, sizeof(servAddr));
- servAddr.ai_family = AF_INET;
- servAddr.ai_socktype = SOCK_STREAM;
- servAddr.ai_protocol = IPPROTO_TCP;
- const TCHAR cpServer[] = TEXT("www.google.com");
- //Resolve hostname to IP
- if(int iRet = GetAddrInfo(cpServer, TEXT("80"), &servAddr, &pServRes))
- {
- _tprintf(TEXT("Error getting server information: %d\n"), iRet);
- WSACleanup();
- }
- //Check if we can connect to the server
- SOCKET servSocket = INVALID_SOCKET;
- //Loop through each address in the linked list, until we get a connectable socket
- pServAddr = pServRes;
- while(1)
- {
- //Attempt to create a socket and connect
- servSocket = socket(pServAddr->ai_family, pServAddr->ai_socktype, pServAddr->ai_protocol);
- int iRes = connect(servSocket, pServAddr->ai_addr, (int)pServAddr->ai_addrlen);
- //Check we have a valid socket and more servers
- if(iRes == SOCKET_ERROR)
- {
- //Close socket
- closesocket(servSocket);
- servSocket = INVALID_SOCKET;
- //Go to next address, if there is one
- if(pServAddr->ai_next != NULL)
- {
- //Go to next server
- pServAddr = pServAddr->ai_next;
- }
- else
- {
- //We've ran out of servers, return with error
- _tprintf(TEXT("Error establishing connection to server: %d\n"), WSAGetLastError());
- FreeAddrInfo(pServRes);
- WSACleanup();
- return 2;
- }
- }
- else
- {
- //We have an invalid socket, continue
- FreeAddrInfo(pServRes);
- break;
- }
- }
- //Send HTTP header to server
- #define MAX_HEADER_LEN 512
- #ifdef UNICODE
- char* cpHost = (char*)malloc(sizeof(char) * (_tcslen(cpServer)+1));
- wcstombs(cpHost, cpServer, _tcslen(cpServer));
- cpHost[_tcslen(cpServer)] = '\0';
- #else
- char* cpHost = cpServer;
- #endif
- char cpHeader[MAX_HEADER_LEN];
- sprintf(cpHeader, "GET %s HTTP/1.1\r\nHost: %s\r\n\r\n", "/", cpHost);
- #ifdef UNICODE
- free(cpHost);
- #endif
- //Send the HTTP request to the sever
- int iSent;
- if(iSent = send(servSocket, cpHeader, strlen(cpHeader), 0) == SOCKET_ERROR)
- {
- _tprintf(TEXT("Error sending header to server: %d\n"), WSAGetLastError());
- WSACleanup();
- return 2;
- }
- _tprintf(TEXT("Sent '%d' bytes\n"), iSent);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement