Parsing an address argument a Client can use domain name or ip address to identify the server machine To determine whether the user has specified a name or an address the client scans the argument Client sometimes need additional information such as protocol port Two arguments merlin. cs, purdue. edu sm打 Single argument merlin. cs. purdue. edu: smtp Consistency is important 哈工大计算机学院李全龙 Network Application Development Client Software Design 6
哈工大计算机学院 李全龙 Network Application Development Client Software Design 6 Parsing an address argument Client can use domain name or IP address to identify the server machine. To determine whether the user has specified a name or an address, the client scans the argument. Client sometimes need additional information, such as protocol port. Two arguments: merlin.cs.purdue.edu smtp Single argument: merlin.cs.purdue.edu:smtp Consistency is important
Looking up a domain name A client must specify the address of a server using structure of sockaddr in Doing so means converting an address in dotted decimal notation or domain name into a 32-bit IP address Function inet addr takes an ASCII string that contains a dotted decimal address and returns the equivalent IP address in binary Function gethostbyname takes an ASCII string that contains the domain name for a machine, and returns the address of a hostent structure that contains among other strings the host's ip address in binal The hostent structure is declared in include file winsock.h 哈工大计算机学院李全龙 Network Application Development Client Software Design 7
哈工大计算机学院 李全龙 Network Application Development Client Software Design 7 Looking up a domain name A client must specify the address of a server using structure of sockaddr_in. Doing so means converting an address in dotted decimal notation (or domain name) into a 32-bit IP address. Function inet_addr takes an ASCII string that contains a dotted decimal address and returns the equivalent IP address in binary. Function gethostbyname takes an ASCII string that contains the domain name for a machine, and returns the address of a hostent structure that contains, among other strings, the host’s IP address in binary. The hostent structure is declared in include file winsock.h
hostent structure stuct hostent char Far为 name / official host name“ char far* far* h aliases: /*other aliases short h addrtype /*address type short h lengty, address leng char far* far h addr list: /list of address #define h addr h addr listlo Fields that contain names and addresses must be lists because of multiple interfaces h addrrefer to the first location in the host address list A program can use h_addr as if it were a field of structure hostent 哈工大计算机学院李全龙 Network Application Development Client Software Design
哈工大计算机学院 李全龙 Network Application Development Client Software Design 8 hostent structure stuct hostent { char FAR* h_name; /*official host name */ char FAR* FAR* h_aliases; /*other aliases */ short h_addrtype; /*address type */ short h_lengty; /*address length */ char FAR* FAR* h_addr_list; /*list of address */ }; #define h_addr h_addr_list[0] Fields that contain names and addresses must be lists because of multiple interfaces. h_addr refer to the first location in the host address list. A program can use h_addr as if it were a field of structure hostent
Example for gethostbyname stuct hostent为hptr; char *examplenam="merlin. cs. purdue. edu if (hptr=gethostbyname(example) /* IP address is now in hptr>h_addr*/ else /*error in name-handle it*/ Successfully call, gethostbyname returns a pointer to a valid hostent struture. Otrerwise Returns a NULL pointer 哈工大计算机学院李全龙 Network Application Development Client Software Design 9
哈工大计算机学院 李全龙 Network Application Development Client Software Design 9 Example for gethostbyname stuct hostent *hptr; char *examplenam=“merlin.cs.purdue.edu”; if (hptr=gethostbyname(example)){ /* IP address is now in hptr->h_addr*/ }else { /*error in name-handle it*/ } Successfully call, gethostbyname returns a pointer to a valid hostent struture. Otrerwise, Returns a NULL pointer
Looking up a well-known port by name Look up the protocol port for specific service a geTservbyname Two arguments A string that specifies the desired service A string that specifies the protocol being used Returns a pointer to a structure of type Servent Defined in include file winsock. h 哈工大计算机学院李全龙 Network Application Development Client Software Desi
哈工大计算机学院 李全龙 Network Application Development Client Software Design 10 Looking up a well-known port by name Look up the protocol port for specific service. getservbyname Two arguments: A string that specifies the desired service A string that specifies the protocol being used Returns a pointer to a structure of type servent. Defined in include file winsock.h