网络编程实验一

Part 1: 实验目的

  1. 熟悉相关编程函数的功能、用法与特性。
  2. 熟练运用地址转换函数及清楚转换前后IP地址格式的变化。

 

Part 2: 实验内容

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

 

1. 字符串copy

String_Copy.c

1 #include<stdio.h>
2 #include<string.h>
3 main()
4 {
5        char a[30]="I am Zhang";
6        char b[]="Qiwei";
7        printf("before strcpy() :%s\n",a);
8        printf("after strcpy() :%s\n",strcpy(a,b));
9 }

 

 

 

 

2. 内存和字符串copy命令比较

Mem_Copy.c

 1 #include<stdio.h>
 2 #include<string.h>
 3 main()
 4 {
 5        char a[30]="string (a)";
 6        char b[30]="string1\0string";
 7        int i;
 8        strcpy(a,b);
 9        printf("strcpy():%s",a);
10        printf("\nstrcpy():");
11        for(i=0;i<30;i++)
12            printf("%c",a[i]);
13        memcpy(a,b,30);
14        printf("\nmemcpy() :");
15        for(i=0;i<30;i++)
16            printf("%c",a[i]);
17        printf("\n");
18        return;
19 }

 

 

3. IP地址转换

IP_Change.c

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<netinet/in.h>
 4 #include<arpa/inet.h>
 5 int main(int argc,char* argv[])
 6 {
 7        struct in_addr addr1,addr2;
 8        unsigned long l1,l2;
 9        char *p1,*p2;
10        int i;
11        l1=inet_addr("192.168.0.74");
12        l2=inet_addr("211.100.21.179");
13        printf("%u\n",l1);
14        for(i=0;i<4;i++)
15        {
16               printf("%02x",*((unsigned char*)(&l1)+i));
17        }
18        printf("\n");
19        printf("%u \n",l2);
20        for(i=0;i<4;i++)
21        {
22               printf("%02x",*((unsigned char*)(&l2)+i));
23        }
24        printf("\n");
25        memcpy(&addr1,&l1,4);
26        memcpy(&addr2,&l2,4);
27        printf("%s\n",inet_ntoa(addr1));
28        printf("%s\n",inet_ntoa(addr2));
29        p1=inet_ntoa(addr1);
30        p2=inet_ntoa(addr2);
31        printf("%s \n",p1);
32        printf("%s \n",p2);
33        return 0;
34 }

 

 

四、实验分析与总结

结果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函数将地址转换成十进制地址并输出。第七行和第八行输出与第六行一样,是 因为返回值所指向的字符串还留在静态内存中,函数是不可重入的,所以输出还是原来的那样。

 

 

 

 

 

 

 

 

 

posted @ 2015-08-28 10:38  elewei  阅读(716)  评论(0)    收藏  举报