● 试题四 请阅读以下说明和Socfort程序,将应填(n)处的字句写在答题纸的对应栏内。 【说明】 网络
● 试题四
请阅读以下说明和Socfort程序,将应填(n)处的字句写在答题纸的对应栏内。
【说明】
网络应用的基本模型是客户机/服务器模型,这是一个不对称的编程模型,通信的双方扮演不同的角色:客户机和服务器。
以下是一个简单的客户机程序(服务器程序略),其工作过程非常简单:客户机与服务器建立连接后,接收服务器向客户机返回的一条消息。
程序中用到了两种结构hostent与sockaddr_in:
hostent类型的结构定义如下:
struct hostent { char*h_name;//主机的正式名称
char**h_aliases;//别名列表
int h_addrtype;//主机地址类型:AF-XXX
int H_length;//主机地址长度:4 B(32 b)
char**h_addr_list;//主机IP地址列表}
#define h-addr h-addr-list[0]
sockaddr_in类型的结构定义:sockaddr_in是通用套接字结构sockaddr在TCP/IP协议下的结构重定义,为TCP/IP套接字地址结构。
Struct sockaddrin{
short int sin-family;//地址类型AF_XXX,其中AF_INET为TCP/IP专用
unsigned short int sin-port;//端口号
struct in_addr sin_addr;//Internet地址
//端口号以及Internet地址使用的是网络字节顺序,需要通过函数htons转换
}
struct iN_addr{
_u32 s-addr;//类型为unsignel-long
}
程序中使用到了多个函数:
struct hostent * gethostbyname(const char* hostname);
函数gethostbyname查询与指定的域名地址对应的IP地址,返回一个hostent结构的指针,如果不成功则返回NULL。
int_socket(int domain,im-type,int protoco1);
函数socket创建一个套接字描述符,如果失败返回-1。domain为地址类型,type为套接字类型,本题中为SOCK_STREAM;protocol指定协议,本题中为0。
int connect(int sockfd,struct sockaddr* servaddr,int addrlen);
函数connect与服务器建立一个连接,成功返回0,失败返回-1。servaddr为远程服务器的套接字地址,包括服务器的IP地址和端口号;addrlen为地址的长度。
int read(int fd,char*bur,int len);
int write(int fd,char*buf,int len);
函数read和write从套接字读和写数据,成功返回数据量大小,否则返回-1。buf指定数据缓冲区,len指定接收或发送的数据量大小。
【Socket程序】
//程序中引用的头文件略
#definePORT 3490
//定义端口号为3490
int main(int argc,char*argv[])
{int sockfd,nbytes;//套接字描述符、读入缓冲区的字节数
char buf[1024];//缓冲区
struct hostent*he;//主机信息类型
struct (1) srvaddr;//Internet套接字结构
if(argc!=2)
{perror("调用参数为零,请输入服务器的主机名!\n");exit (1) ;}
if( (2) )//如果通过主机名没有获得对应的主机信息就提示用户
{perror("无法通过主机名获得主机信息!\n");exit (1) ;}
if( (3) ) //在无法创建套接字时,提示用户
{perror("无法创建套按字!\n");exit (1) ;}
bzero(&srvaddr, (4) );//置空srvaddr
sraddr,sin_family=AF_INET;
srvaddr,sin_port: htons(PORT);srvaddr.sin_addr: (5) ;
//设置套接字结构的各项信息,其中的地址来自域名查询后的hp变量
if(connect(sockfd,(n) ,sizeof(struct sockaddr))==-1)
{perror("连接失败!\n");exit (1) ;}
//连接服务器,如果失败则提示用户
if((nbytes=read(sockfd,buf,MAXDATASIZE))=-1)
{perror("读失败!\n");exit (1) ;}
//从套接字中读出数据
buf[nbytes]=\0;
printf("读到的内容:%s",buf);
close(sockfd);
//打印数据并关闭套接字
}
● 试题四
【答案】
(1)sockaddr_in
(2)(he=gethostbyname(argv[1]))==NULL
(3)(sockfd=socket(AF_INET,SOCK_STREAM.0))==-1
(4)sizeof(srvaddr)
(5)*((struct in_addr*)he->h_addr)
(6)(struct sockaddr*)&srvaddr
阅读以下说明,回答问题1至问题8,将解答填入答题纸对应的解答栏内。【说明】 Linux系统开机 计算机类考试 2020-05-26 …
试题二(共15 分) 阅读以下说明,回答问题1至问题5,将解答填入答题纸对应的解答栏内。 【说明】 计算机类考试 2020-05-26 …
阅读以下说明,回答问题,将解答填入答题纸对应的解答栏内。[说明] 现由下两种游戏,游戏A是掷一个硬 计算机类考试 2020-05-26 …
阅读以下说明,回答问题1至问题3,将解答填入答题纸对应的解答栏内。 【说明】 某校园无线网络拓扑 计算机类考试 2020-05-26 …
阅读以下说明,回答问题1至问题2,将解答填入答题纸对应的解答栏内。 【说明】 配置WWW服务器是UN 计算机类考试 2020-05-26 …
阅读以下说明,回答问题 1至问题 4 ,将解答填入答题纸对应的解答栏内。 【说明】 某企业网络拓扑如 计算机类考试 2020-05-26 …
阅读以下说明,回答问题 1 至问题 3,将解答填入答题纸对应的解答栏内。 【说明】 请根据Windo 计算机类考试 2020-05-26 …
阅读以下说明,回答问题1至问题2,将解答填入答题纸对应的解答栏内。 【说明】 图4-1为某学校网络拓 计算机类考试 2020-05-26 …
阅读以下说明,回答问题1至问题4,将解答填入答题纸对应的解答栏内。【说明】某企业总部设立在A地,在B 计算机类考试 2020-05-26 …
阅读以下说明,回答问题1至问题5,将解答填入答题纸对应的解答栏内。 【说明】 某公司采用Windo 计算机类考试 2020-05-26 …