网络编程实验一
Part 1: 实验目的
- 熟悉相关编程函数的功能、用法与特性。
- 熟练运用地址转换函数及清楚转换前后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函数将地址转换成十进制地址并输出。第七行和第八行输出与第六行一样,是 因为返回值所指向的字符串还留在静态内存中,函数是不可重入的,所以输出还是原来的那样。

浙公网安备 33010602011771号