您好,欢迎访问三七文档
本次实验要求完成以下内容:要求:1.将上面程序用vi录入并编译运行,老师查看运行结果。2.为程序加注释,重点解释输出结果的含义,写在活页纸上下课前上交;重点提示:上交材料雷同者,全部作废,视为没有完成实验。一、运行结果二、程序注释Main(){inti;//定义一个名为i的整形变量structsockaddr_inserver;//定义一个名为server的sockaddr_in类型的结构体bzero(&server,sizeof(server));//为网际套接字地址结构server设置初始值0printf(“Yourserver’sipinitmemis\n”);//输出Yourserver’sipinitmemis字符串并换行for(i=0;isizeof(server);i++)//以十六进制形式输出套接字地址结构server的初始值{Printf(“%02x”,*((unsignedchar*)(&server)+i));}printf(“\n”);server.sin_family=AF_INET;server.sin_port=htons(PORT);server.sin_addr.s_addr=inet_addr(“127.0.0.1”);//以上三行为套接字地址结构中的成员赋值,客户端要建立连接的服务器IP地址为127.0.0.1,端口号为1234printf(“Yourserver’sipsin_familyis%d\n”,server.sin_family);//以整数形式输出网际套接字地址结构中sin_family成员的值printf(“Yourserver’sipis%s,portis%d\n”,inet_ntoa(server.sin_addr),htons(server.sin_port));//以字符串的形式输出网际套接字地址结构中sin_addr成员的值,以整数形式输出网际套接字地址结构中sin_port成员的值printf(“Yourserver’slengthis%d\n”,sizeof(server));//以整数形式输出该套接字地址结构的大小printf(“Yourserver’sipmemis\n”);//输出Yourserver’sipmemis字符串并换行for(i=0;isizeof(server);i++)//以十六进制形式输出网际套接字地址结构server的值{printf(“%02x”,*((unsignedchar*)(&server)+i));}return;}三、输出结果解释第一行结果:执行printf(“Yourserver’sipinitmemis\n”);之后,printf函数输出字符串Yourserver’sipinitmemis并换行第二行结果:本行结果为网际套接字地址结构server设置初始值0之后的结果;此次结果显示为32个零,其中sin_family成员的值,占2个字节,对应为0000;sin_port成员的值,占2个字节,对应为0000;sin_family成员的值,占4个字节,对应为00000000;最后十六个零为sin_zero成员的值,占8个字节,对应为0000000000000000。其中网际套接字地址结构体中共包含5个成员,sin_len是长度成员,占一个字节,存储套接字地址结构的长度,但不是所有系统都支持,有了它可以简化变长套接字地址结构的处理。一般情况下不需要设置它和检查它,除非涉及到路由套接字,本处并没有涉及到路由套接字所以只有32个零,否则可能是34个零。bzero函数的原型是externvoidbzero(void*s,intn),其中s为要置零的数据的起始地址,n为要置零的数据的字节个数,函数功能是将s所指的内存区域前n个字节置为0,且包括‘\0’。在执行过bzero函数之后,将server所指的内存区域中的字节全部置为0,故输出后的结果全部为0。第三行结果:本行结果为网际套接字地址结构中的成员sin_family的AF_INET的默认值2sin_family是Internet地址族,在IPv4中是AF_INET,其默认值为2。Winsock2.h中#defineAF_INET2//internetwork:UDP,TCP,etc.第四行结果:本行结果为网际套接字地址结构中的成员ip地址的值和端口号的值。inet_ntoa函数的作用是将网际套接字地质结构中存储的32位的网络字节序的二进制IP地址转换成人们通用的点分十进制的IP地址并输出为127.0.0.1其中,127.0.0.1转换为32位的网络字节序的二进制IP地址为:1111111.00000000.00000000.0000000132位的网络字节序的二进制IP地址转换为点分十进制的IP地址为:127.0.0.1PORT在程序的开头被声明为默认值1234,并在server.sin_port=htons(PORT)语句中被转换成网络字节序给sin_port赋值。htons函数的作用是将16位的短整型数从主机字节序转换成网络字节序并以整形形式输出为1234第五行结果:本行结果为网际套接字地址结构server的大小16个字节sockaddr_in结构体中包含5个成员,其中sin_len是长度成员,存储套接字地址结构的长度,但不是所有系统都支持,一般情况下不需要设置它和检查它,除非涉及到路由套接字。本程序并没有设置这个成员,所以只有16个字节。其中sin_family成员的值,占2个字节,sin_port成员的值,占2个字节,sin_family成员的值,占4个字节,sin_zero成员的值,占8个字节,共16个字节。第六行结果:执行printf(“Yourserver’sipmemis\n”);之后,printf函数输出字符串Yourserver’sipmemis并换行第七行结果:本行结果输出为020004d27f0000010000000000000000共16个字节,以十六进制形式输出,其中0200这两个字节表示的是成员sin_family的值,以小端方式存储,在以上的结果输出中,以十进制形式输出的结果为2,而在内存中,其值占两个字节,所以空出的部分补零;04d2这两个字节表示的是成员sin_port的值,对应的十进制值为1234;7f000001这四个字节表示的是成员sin_family的值,占四个字节,对应的点分十进制是127.0.0.1,;最后的八个字节全部置为0,暂时没有被使用,总是将它置为0。
本文标题:网络编程实验四
链接地址:https://www.777doc.com/doc-5923197 .html