正在加载图片...
Thread Structure for Iterative pass/veUDP Connectionless Server A Use protocol to choose a socket type"/ Server type SOcK-DGRAM plication thread GetLastErrorOk port: Zd\n. service. GetLastErrorO) An example TIME server An example TIME server /UDPtimed, cpp-main #include ctime. k struct sockaddr in fsic #include < hp 20485 /"input"buffer: any size I packet. * passiveUDP(const char *E from-address length #define WINEPOCH 2208988800/ Windows epoch, in UCT WSADATA sadat #define wavERS MA∈ EWORD(2.0) main-Iterative UDP server for TIME service 如2些 rvice =argv(lE air(int argc, char *argvD rexit("usage: UDPtimed [port]\n"):] Iterative Connection-oriented An example TIME server Servers arup failed\n") aA connection-oriented server calls function rvice) passive / to create a stream socket while( 1)( passive TCP takes two arguments buf, sizeof(buf), o A character string Nname or number of service ddr * )fsin, dalen)== SOCKET_ERROR Length of incoming connection request queue ecvfrom: error %d\n", GetLastError) (void) sendto(sock (char *)now struct sockaddr & fsin, si return 1: / not reached *5 哈工大计算机学院 李全龙 Network Application Development Server Software Design 25 passiveUDP /* Map protocol name to protocol number */ if ( (ppe = getprotobyname(transport)) == 0) errexit("can't get \"%s\" protocol entry\n", transport); /* Use protocol to choose a socket type */ if (strcmp(transport, "udp") == 0) type = SOCK_DGRAM; else type = SOCK_STREAM; /* Allocate a socket */ s = socket(PF_INET, type, ppe->p_proto); if (s == INVALID_SOCKET) errexit("can't create socket: %d\n", GetLastError()); /* Bind the socket */ if (bind(s, (struct sockaddr *)&sin, sizeof(sin)) == SOCKET_ERROR) errexit("can't bind to %s port: %d\n", service, GetLastError()); if (type == SOCK_STREAM && listen(s, qlen) == SOCKET_ERROR) errexit("can't listen on %s port: %d\n", service, GetLastError()); return s;} 哈工大计算机学院 李全龙 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 哈工大计算机学院 李全龙 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[]) 哈工大计算机学院 李全龙 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");} 哈工大计算机学院 李全龙 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 */ } 哈工大计算机学院 李全龙 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
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有