/* 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) { printf("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 */ { printf("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) { printf("Error resolving host name: %s\n", argv[1]); 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) { printf("Error opening socket.\n"); return -1; } /* Establish connection using socket and host address */ if (connect(???, (struct sockaddr*)&SockAddrRead, sizeof(SockAddrRead)) == SOCKET_ERROR) { printf("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) { printf("Receive error.\n"); return -1; } printf("DayTime server on %s returns %s\n", argv[1], szBuffer); #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; }