码迷,mamicode.com
首页 > 其他好文 > 详细

网络编程实验一

时间:2015-08-28 10:49:39      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:

 

一、实验目的:

1、  熟悉相关编程函数的功能、用法与特性。

2、  熟练运用地址转换函数及清楚转换前后IP地址格式的变化。

二、实验内容

理解程序同时写出程序输出内容含义。

  • 字符串copy
  • 内存和字符串copy命令比较
  • IP地址转换

三、代码设计

字符串copy:

#include<stdio.h>

#include<string.h>

main()

{

       char a[30]="string(1)";

       char b[]="string(2)";

       printf("before strcpy() :%s\n",a);

       printf("after strcpy() :%s\n",strcpy(a,b));

}

 

内存和字符串copy命令比较:

#include<stdio.h>

#include<string.h>

main()

{

       char a[30]="string (a)";

       char b[30]="string1\0string";

       int i;

       strcpy(a,b);

       printf("strcpy():%s",a);

       printf("\nstrcpy():");

       for(i=0;i<30;i++)

           printf("%c",a[i]);

       memcpy(a,b,30);

       printf("\nmemcpy() :");

       for(i=0;i<30;i++)

           printf("%c",a[i]);

       printf("\n");

       return;

}

 

IP地址转换:

#include<stdio.h>

#include<string.h>

#include<netinet/in.h>

#include<arpa/inet.h>

int main(int argc,char* argv[])

{

       struct in_addr addr1,addr2;

       unsigned long l1,l2;

       char *p1,*p2;

       int i;

       l1=inet_addr("192.168.0.74");

       l2=inet_addr("211.100.21.179");

       printf("%u\n",l1);

       for(i=0;i<4;i++)

       {

              printf("%02x",*((unsigned char*)(&l1)+i));

       }

       printf("\n");

       printf("%u \n",l2);

       for(i=0;i<4;i++)

       {

              printf("%02x",*((unsigned char*)(&l2)+i));

       }

       printf("\n");

       memcpy(&addr1,&l1,4);

       memcpy(&addr2,&l2,4);

       printf("%s\n",inet_ntoa(addr1));

       printf("%s\n",inet_ntoa(addr2));

       p1=inet_ntoa(addr1);

       p2=inet_ntoa(addr2);

       printf("%s \n",p1);

       printf("%s \n",p2);

       return 0;

}

 

四、实验分析与总结

结果1:

 

利用strcpy()函数将b字符串拷贝到a数组中,返回结果为拷贝后的结果。输出的第一行是拷贝之前的原数组a,第二行是拷贝之后的a数组,被b数组完全覆盖了。

 

结果2:

 

利用memcpy()函数同样实现拷贝功能,a是拷贝的位置,b是拷贝的位置,30是长度。’\0’即结束。输出的第一行输出的是用strcpy()函数拷贝后的a数组——被b数组全部覆盖了,a数组的长度不变。第二行是for循环中\0不输出,并不结束。第三行是输出mencpy()函数将b数组函数完全拷贝到a数组,a数组的长度会变成b数组,所以拷贝的是全部的b数组。

结果3:

 

inet_addr函数将字符串形式的IP地址转换成32位二进制值的IP地址。memcpy 函数将存放在l1,l2中的32位二进制IP地址存放到addr1,addr2中并输出。inet_ntoa函数将32位网络字节序的二进制IP地址转换成相应的点分十进制的IP地址。第一行和第三行是输出了经过inet_addr函数转换后的二进制值以无符号的形式输出。第二行和第四行是将二进制值强制转换成无符号数,再以2位的十六进制输出。第五行和第六行再用inet_ntoa函数将地址转换成十进制地址并输出。第七行和第八行输出与第六行一样,是因为返回值所指向的字符串还留在静态内存中,函数是不可重入的,所以输出还是原来的那样。

 

 

网络编程实验一

标签:

原文地址:http://www.cnblogs.com/elewei/p/4765769.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!