Thread Structure for Iterative Connectionless Server Server server application thread Socket at well-known port Operating used for all communication system 哈工大计算机学院李全龙 Network Application Development Server Software Design 26
哈工大计算机学院 李全龙 Network Application Development Server Software Design 26 Thread Structure for Iterative Connectionless Server server Socket at well-known port used for all communication Server application thread Operating system
An example TIME server / UDPtimed. cpp-main*/ #include <time. h> #include <winsock.h> SOCKET passiveUDP( const char对) void errexit(const char x, #define WINEPOCH 2208988800/ Windows epoch, in UCT secs #define WSVERS MAKEWORD(2, 0) main- Iterative UDP server for tIME service main(int argc, char *argV[D) 哈工大计算机学院李全龙 Network Application Development Server Software Design 27
哈工大计算机学院 李全龙 Network Application Development Server Software Design 27 An example TIME server /* UDPtimed.cpp - main */ #include <time.h> #include <winsock.h> SOCKET passiveUDP(const char *); void errexit(const char *, ...); #define WINEPOCH 2208988800/* Windows epoch, in UCT secs */ #define WSVERS MAKEWORD(2, 0) /*------------------------------------------------------------------------ * main - Iterative UDP server for TIME service *------------------------------------------------------------------------ */ int main(int argc, char *argv[])
An example TIME server struct sockaddr in fsin the from address of a client * char *service =time service name or port number * char buf[2048]; /*input"buffer; any size 1 packet SOCKeT sock:/server socket time t now current time int alen / from-address length WSADATA wsadata switch(argc) case break case 2: service argv[ 1] break default errexit("usage: UDPtimed [port]\n):] 哈工大计算机学院李全龙 Network Application Development Server Software Design 28
哈工大计算机学院 李全龙 Network Application Development Server Software Design 28 An example TIME server { struct sockaddr_in fsin; /* the from address of a client */ char *service = "time"; /* service name or port number */ char buf[2048]; /* "input" buffer; any size > 1 packet */ SOCKET sock; /* server socket */ time_t now; /* current time */ int alen; /* from-address length */ WSADATA wsadata; switch (argc) { case 1: break; case 2: service = argv[1]; break; default: errexit("usage: UDPtimed [port]\n");}
An example TIME server if (wSAStartuP (WSVERS, &wsadata) errexit( WSAStartup failed \n") sock= passiveUDP(service): while (1)i alen= sizeof(fsin) if (recvfrom(sock, buf, sizeof(buf),0 (struct sockaddr *)&fsin, &alen)== SOCKET_ERROR errexit("recvfrom: error %d \n", GetLast Error o) (void) time (&now) now= htonl((u_long)(now+ WINEPOCH) void) sendto(sock, (char * )&now, sizeof(now), 0 (struct sockaddr * )&fsin, sizeof (fsin)) return 1:/* not reached * 哈工大计算机学院李全龙 Network Application Development Server Software Desi
哈工大计算机学院 李全龙 Network Application Development Server Software Design 29 An example TIME server if (WSAStartup(WSVERS, &wsadata)) errexit("WSAStartup failed\n"); sock = passiveUDP(service); while (1) { alen = sizeof(fsin); if (recvfrom(sock, buf, sizeof(buf), 0, (struct sockaddr *)&fsin, &alen) == SOCKET_ERROR) errexit("recvfrom: error %d\n", GetLastError()); (void) time(&now); now = htonl((u_long)(now + WINEPOCH)); (void) sendto(sock, (char *)&now, sizeof(now), 0, (struct sockaddr *)&fsin, sizeof(fsin)); } return 1; /* not reached */ }
Iterative Connection-oriented Servers A connection-oriented server calls function passive/CPto create a stream socket passive TCP takes two arguments A character string Nname or number of service Length of incoming connection request queue 哈工大计算机学院李全龙 Network Application Development Server Software Desi
哈工大计算机学院 李全龙 Network Application Development Server Software Design 30 Iterative Connection-oriented Servers A connection-oriented server calls function passiveTCP to create a stream socket passiveTCP takes two arguments: A character string-Nname or number of service Length of incoming connection request queue