#include "stdafx.h" #include #include // specifics to hook up to the US Naval Observatory #define IP_ADDRESS "127.0.0.1" #define IP_PORT 12934 #define HTTPGET "GET /cgi-bin/timer.pl \r\n\r\n\0" // define buffer size #define RECVBUFF_SIZE 500 // set up sockets info WSAData wsaData; SOCKET m_socket; sockaddr_in serverAddr; int isSocketOK(int retValue, TCHAR * msg) { if (retValue!=SOCKET_ERROR) return TRUE; std::wcout << msg <<_TEXT(": ")<< WSAGetLastError() << _TEXT("\n"); WSACleanup(); return FALSE; } void showWSAData(WSAData * wsad) { // to show what the wsadata looks like std::wcout << "wVersion: " << wsad->wVersion << "\n"; std::wcout << "wHighVersion: " << wsad->wHighVersion << "\n"; std::wcout << "szDescription: " << wsad->szDescription << "\n"; std::wcout << "szSystemStatus: " << wsad->szSystemStatus << "\n"; std::wcout << "iMaxSockets: " << wsad->iMaxSockets << "\n"; std::wcout << "iMaxUdpDg: " << wsad->iMaxUdpDg << "\n"; } int _tmain(int argc, _TCHAR* argv[]) { int iResult = WSAStartup(MAKEWORD(2,2), &wsaData); if(iResult != NO_ERROR) { std::wcout << L"Error at Socket startup\n" << iResult << L"\n"; return -1; } showWSAData(&wsaData); m_socket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if(m_socket == INVALID_SOCKET) { std::wcout << L"Error in socket" << WSAGetLastError() << "\n"; WSACleanup(); return -1; } std::wcout << L"Socket Created\n"; serverAddr.sin_family = AF_INET; serverAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS); serverAddr.sin_port = htons(IP_PORT); if (!isSocketOK(connect(m_socket, (SOCKADDR*) &serverAddr, sizeof(serverAddr) ),_TEXT("Connection Error"))) return -1; std::wcout << "Connected\n"; // we want to send the GET command and receive the data back for this // simple client TCHAR sendBuff[32] = _T(HTTPGET); for(int i=0; i<5; ++i) { int bytesSent = send(m_socket,sendBuff,(int)_tcslen(sendBuff)*sizeof(TCHAR),0); if(!isSocketOK(bytesSent,_T("Send Failed"))) return -1; std::wcout << "GET request sent to server\n"; TCHAR recvBuff[RECVBUFF_SIZE+1]; int buffLen = RECVBUFF_SIZE*sizeof(TCHAR); int bytesRecvd = recv(m_socket,recvBuff,buffLen,0); if(!isSocketOK(bytesRecvd,_T("Receive failed"))) return -1; std::wcout << bytesRecvd << " bytes of data received\n"; // zero terminate the buffer for printing recvBuff[bytesRecvd] = 0; std::wcout << _T(recvBuff) << _T("\n"); Sleep(3000); if(WSAGetLastError() == WSAECONNRESET) { std::wcout << L"Server dropped the connection\n"; break; } else { if(!isSocketOK(bytesRecvd,_TEXT("Send/Receive Failed"))) return -1; } } WSACleanup(); return 0; }