1、四 川 大 学 计 算 机 学 院、软 件 学 院 实 验 报 告 课程名称 信息安全产品开发实践 实验课时 5 实验项目 Socket编程 实验时间 2011年9月15号 实验目的 1) 继续了解Linux下C语言程序开发的过程 2) 了解Socket网络编程 3) 了解大端机器和小端机器 4) 了解服务器与客户端的通信原理 5) 了解常用套接字函数使用 6) 了解如何用TCP和UDP编写程序实现服务器与客户端的通信 实验环境 VMware5.0,RedHat Linux 9.0 实验内容(算法、程序、步骤和方法) • 实
2、验一:结合big-endian和little-endian的概念编写一个程序,判断自己试验用机的字节存储结构;
具体步骤:
(1):在Linux下编写测试程序Example.c
#include
3、mple输出结果如下:
(3):分析结果
打印出来的结果是0,说明数组c的第2元素存储的是0,即整型i在内存中的二进制存储顺序为00000001 00000000符合小端机器的定义,故本机是小端机器。
• 实验二:在老师给出的事例程序的基础上 ,才用数据报的方式改写客户端与服务器端程序,实现一个与实例程序相同的网络通讯程序。
具体步骤:
(1):在Linux编写服务器端程序TCPserver.c
#include 4、et.h>
#include 5、mset(&my_addr,0,sizeof(my_addr));
my_addr.sin_family=AF_INET;
my_addr.sin_addr.s_addr=INADDR_ANY;
my_addr.sin_port=htons(8000);
if((server_sockfd=socket(PF_INET,SOCK_STREAM,0))<0)
{
perror("socket");
return 1;
}
if (bin 6、d(server_sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))<0)
{
perror("bind");
return 1;
}
listen(server_sockfd,10);
sin_size=sizeof(struct sockaddr_in);
if((client_sockfd=accept(server_sockfd,(struct sockaddr *)&remote_addr 7、sin_size))<0)
{
perror("accept");
return 1;
}
printf("accept client %s/n",inet_ntoa(remote_addr.sin_addr));
len=send(client_sockfd,"Hello,\n",10,0);
while((len=recv(client_sockfd,buf,BUFSIZ,0))>0))
{
buf[len]='\0';
8、
printf("%s\n",buf);
if(send(client_sockfd,buf,len,0)<0)
{
perror("write");
return 1;
}
}
close(client_sockfd);
close(server_sockfd);
return 0;
}
(2):使用gcc –o TCPserver TCPserver.c –g命令编译
9、
(接上)
实验内容(算法、程序、步骤和方法)
(3):编写客户端程序:TCPclient.c
#include 10、ckaddr_in remote_addr;
char buf[BUFSIZ];
memset(&remote_addr,0,sizeof(remote_addr));
remote_addr.sin_family=AF_INET;
remote_addr.sin_addr.s_addr=inet_addr("127.0.0.1");
remote_addr.sin_port=htons(8000);
if((client_sockfd=socket(PF_INET,SOCK_STREAM,0))<0)
{
11、 perror("socket");
return 1;
}
if(connect(client_sockfd,(struct sockaddr *)&remote_addr,sizeof(struct sockaddr))<0)
{
perror("connect");
return 1;
}
printf("connected to server\n");
len=recv(client_sockfd,buf,BUFSIZ,0); 12、
buf[len]='\0';
printf("%s",buf);
while(1)
{
printf("Enter string to send:");
scanf("%s",buf);
if(!strcmp(buf,"quit")
break;
len=send(client_sockfd,buf,strlen(buf),0);
len=recv(client_s 13、ockfd,buf,BUFSIZ,0);
buf[len]='\0';
printf("received:%s\n",buf);
}
close(client_sockfd);
return 0;
}
(4): 使用gcc –o TCPclient TCPclient.c –g命令编译
(5):执行服务器端代码(./TCPserver),客户端连接服务器(./TCPclient 127.0.0.1):
(6):客户端输入字符串nice to meet you,服务器端正确收到数 14、据:
(7):客户端继续输入字符串byebye,服务器端正确接收
(8):客户端输入quit命令,断开连接,服务器正确反应,与客户端脱离连接
数据记录
和计算
详细见上面
结 论
(结 果)
(1):经过验证本机是小端机器。
(2):使用套接字能实现主机之间的网络通信,且有TCP和UDP两种形式。
小 结
通过本实验,我掌握了:
1) 进一步熟悉了Linux下C语言程序开发的过程
2) 初步了解Socket网络编程
3) 了解了什么是大端机器和小端机器,并能进行判 15、断一台机器是大端的还是小端的
4) 了解了服务器与客户端的通信原理
5) 会使用一些基本的套接字函数
目前我存在的问题有:
套接字的函数比较繁琐,掌握的不是很熟练。
指导老师评 议
成绩评定: 指导教师签名:
实验报告说明
专业实验中心
实验名称 要用最简练的语言反映实验的内容。如验证某程序、定律、算法,可写成“验证×××”;分析×××。
实验目的 目的要明确,要抓住重点,可以从理论和实践两个方面 16、考虑。在理论上,验证定理、公式、算法,并使实验者获得深刻和系统的理解,在实践上,掌握使用实验设备的技能技巧和程序的调试方法。一般需说明是验证型实验还是设计型实验,是创新型实验还是综合型实验。
实验环境 实验用的软硬件环境(配置)。
实验内容(算法、程序、步骤和方法) 这是实验报告极其重要的内容。这部分要写明依据何种原理、定律算法、或操作方法进行实验,要写明经过哪几个步骤。还应该画出流程图(实验装置的结构示意图),再配以相应的文字说明,这样既可以节省许多文字说明,又能使实验报告简明扼要,清楚明白。
数据记录和计算 指从实验中测出的数据以及计算结果。
结论(结果) 即根据实验过程中所见到的现象和测得的数据,作出结论。
小结 对本次实验的体会、思考和建议。
备注或说明 可写上实验成功或失败的原因,实验后的心得体会、建议等。
注意:
· 实验报告将记入实验成绩;
· 每次实验开始时,交上一次的实验报告,否则将扣除此次实验成绩。






