/* Author: CS4153/CS6153 - Fall 2000 Purpose: */ #include #include #ifdef WIN32 /* for Windows */ #include #else /* for UNIX */ #include #include #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 SockAddrSend; struct sockaddr_in SockAddrRecv; int iSock; char szBuffer[1024]; int iRecvSockAddrSize; #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 /* for UNIX */ /* UNIX sockets do not need to be setup like WinSock */ #endif /* check for host address */ /* initialize host socket address */ /* figure out remote host's IP address */ /* create an unbound datagram (UDP) socket */ iSock = socket(???, ???, ???); /* No need to establish a connection with the host */ /* clear receive buffer */ /* send dummy data to UDP DayTime server to inform it that we are waiting to receive data. */ if (sendto(???, ???, ???, ???, ???, ???) == SOCKET_ERROR) { std::cout << "Send error.\n"; return -1; } /* receive data over socket */ if (recvfrom(???, ???, ???, ???, ???, ???) == SOCKET_ERROR) { std::cout << "Receive error.\n"; return -1; } printf("UDP 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; }