/* Author: CS4153/CS6153 - Fall 2000 Purpose: */ #include #include #ifdef WIN32 /* for Windows */ #include #else /* for UNIX */ #include #include /* for UNIX */ #define IPPROTO_IP 0 #define SOCKET_ERROR -1 #define INADDR_NONE 0xffffffff #endif #define DAYTIME_PORT 13 /* port number for daytime server */ int main(int argc, char *argv[]) { unsigned long ulAddrIP; struct hostent *pHostEnt; struct sockaddr_in SockAddrRead; int iSock; char szBuffer[1024]; #ifdef WIN32 /* for Windows */ WORD wVersionRequested; WSADATA wsaData; /* setup windows sockets */ wVersionRequested = MAKEWORD( 1, 1 ); if(WSAStartup(wVersionRequested, &wsaData ) != 0) { std::cout << "Error initlializing Windows sockets\n"; return -1; } #else /* UNIX sockets do not need to be setup like WinSock */ #endif if (argc < 2) /* check for host address */ { std::cout << "Usage: DayTime
\n"; return -1; } /* initialize host socket address */ memset(&(SockAddrRead), '\0', sizeof(SockAddrRead)); SockAddrRead.sin_port = htons(???); /* port setting */ SockAddrRead.sin_family = ???; /* Internet addressing */ ulAddrIP = inet_addr(???); /* see if host's dotted address is specified */ if (ulAddrIP == INADDR_NONE) { /* host's address is a name */ pHostEnt = gethostbyname(???); /* use DNS to get dotted address */ if (pHostEnt == NULL) { std::cout << "Error resolving host name: " << argv[1] << std::endl; return -1; } /* set binary address */ memcpy(&(SockAddrRead.sin_addr), pHostEnt->h_addr, pHostEnt->h_length); } else { /* set binary address */ memcpy(&(SockAddrRead.sin_addr), &ulAddrIP, sizeof(SockAddrRead.sin_addr)); } /* create an unbound stream (TCP) socket */ iSock = socket(???, ???, IPPROTO_IP); if (iSock == SOCKET_ERROR) { std::cout << "Error opening socket.\n"; return -1; } /* Establish connection using socket and host address */ if (connect(???, (struct sockaddr*)&SockAddrRead, sizeof(SockAddrRead)) == SOCKET_ERROR) { std::cout << "Connection error.\n"; return -1; } /* obtain and write the local host name and bound socket's port number. */ /* clear receive buffer */ memset(szBuffer, '\0', sizeof(szBuffer)); /* receive data over socket */ if (recv(???, ???, ???, 0) == SOCKET_ERROR) { std::cout << "Receive error.\n"; return -1; } std::cout << "DayTime server on " << argv[1] << " returns " << szBuffer << std::endl; #ifdef WIN32 /* for Windows only */ closesocket(iSock); /* close the socket */ WSACleanup(); /* cleanup WInSock */ #else /* for UNIX */ close(iSock); /* close the socket */ /* UNIX sockets do not need to be cleanedup like WinSock */ #endif return 0; }