void GetHTTP(LPCSTR lpServerName, LPCSTR lpFileName) { // // Use inet_addr() to determine if we're dealing with a name // or an address // IN_ADDR iaHost; LPHOSTENT lpHostEntry; iaHost.s_addr = inet_addr(lpServerName); if (iaHost.s_addr == INADDR_NONE) { // Wasn't an IP address string, assume it is a name lpHostEntry = gethostbyname(lpServerName); } else { // It was a valid IP address string lpHostEntry = gethostbyaddr((const char *)&iaHost, sizeof(struct in_addr), AF_INET); } if (lpHostEntry == NULL) { PRINTERROR("gethostbyname()"); return; } // // Create a TCP/IP stream socket // SOCKET Socket; Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (Socket == INVALID_SOCKET) { PRINTERROR("socket()"); return; } // // Find the port number for the HTTP service on TCP // LPSERVENT lpServEnt; SOCKADDR_IN saServer; lpServEnt = getservbyname("http", "tcp"); if (lpServEnt == NULL) saServer.sin_port = htons(80); else saServer.sin_port = lpServEnt->s_port; // // Fill in the rest of the server address structure // saServer.sin_family = AF_INET; saServer.sin_addr = *((LPIN_ADDR)*lpHostEntry->h_addr_list); // // Connect the socket // int nRet; nRet = connect(Socket, (LPSOCKADDR)&saServer, sizeof(SOCKADDR_IN)); if (nRet == SOCKET_ERROR) { PRINTERROR("connect()"); closesocket(Socket); return; } // // Format the HTTP request // char szBuffer[1024]; sprintf(szBuffer, "GET %s\n", lpFileName); nRet = send(Socket, szBuffer, strlen(szBuffer), 0); if (nRet == SOCKET_ERROR) { PRINTERROR("send()"); closesocket(Socket); return; } // // Receive the file contents and print to stdout // while(1) { // Wait to receive, nRet = NumberOfBytesReceived nRet = recv(Socket, szBuffer, sizeof(szBuffer), 0); if (nRet == SOCKET_ERROR) { PRINTERROR("recv()"); break; } fprintf(stderr,"\nrecv() returned %d bytes", nRet); // Did the server close the connection? if (nRet == 0) break; // Write to stdout fwrite(szBuffer, nRet, 1, stdout); } closesocket(Socket); }
{
//
// Use inet_addr() to determine if we're dealing with a name
// or an address
//
IN_ADDR iaHost;
LPHOSTENT lpHostEntry; iaHost.s_addr = inet_addr(lpServerName);
if (iaHost.s_addr == INADDR_NONE)
{
// Wasn't an IP address string, assume it is a name
lpHostEntry = gethostbyname(lpServerName);
}
else
{
// It was a valid IP address string
lpHostEntry = gethostbyaddr((const char *)&iaHost,
sizeof(struct in_addr), AF_INET);
}
if (lpHostEntry == NULL)
{
PRINTERROR("gethostbyname()");
return;
}
//
// Create a TCP/IP stream socket
//
SOCKET Socket; Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (Socket == INVALID_SOCKET)
{
PRINTERROR("socket()");
return;
}
//
// Find the port number for the HTTP service on TCP
//
LPSERVENT lpServEnt;
SOCKADDR_IN saServer; lpServEnt = getservbyname("http", "tcp");
if (lpServEnt == NULL)
saServer.sin_port = htons(80);
else
saServer.sin_port = lpServEnt->s_port;
//
// Fill in the rest of the server address structure
//
saServer.sin_family = AF_INET;
saServer.sin_addr = *((LPIN_ADDR)*lpHostEntry->h_addr_list);
//
// Connect the socket
//
int nRet; nRet = connect(Socket, (LPSOCKADDR)&saServer, sizeof(SOCKADDR_IN));
if (nRet == SOCKET_ERROR)
{
PRINTERROR("connect()");
closesocket(Socket);
return;
}
//
// Format the HTTP request
//
char szBuffer[1024]; sprintf(szBuffer, "GET %s\n", lpFileName);
nRet = send(Socket, szBuffer, strlen(szBuffer), 0);
if (nRet == SOCKET_ERROR)
{
PRINTERROR("send()");
closesocket(Socket);
return;
} //
// Receive the file contents and print to stdout
//
while(1)
{
// Wait to receive, nRet = NumberOfBytesReceived
nRet = recv(Socket, szBuffer, sizeof(szBuffer), 0);
if (nRet == SOCKET_ERROR)
{
PRINTERROR("recv()");
break;
} fprintf(stderr,"\nrecv() returned %d bytes", nRet); // Did the server close the connection?
if (nRet == 0)
break;
// Write to stdout
fwrite(szBuffer, nRet, 1, stdout);
}
closesocket(Socket);
}