第一篇:计算机网络原理实验三
实验
三、套接字编程
序号: 姓名: 字丽梅 学号: 20091120216 成绩
1.实验目的:
两人一组,编写一个客户端、服务器程序,掌握Socket编程原理。2.实验环境:
连入局域网络的主机一台。3.实验指导:
Socket API是实现进程间通信的一种编程设施,也是一种为进程间提供底层抽象的机制。理解socket编程模型及其原理。4.实验分析,回答下列问题。
a.运行指导书中的程序,并修改服务器的功能(自己思考),改写成多线程web服务器(选作),附上源代码,并加关键代码注释。
b.给出程序调试和运行的截图。
c.回答下列问题:
(1)为什么在服务器和客户端要包含winsock2.h文件?
答:Windows网络编程至少需要两个头文件:winsock2.h和windows.h。
(2)为什么在服务器和客户端程序中要加入#pragma comment(lib,“ws2_32.lib”)语句,如果不加会出现什么问题?
答:#pragma comment(lib,“ws2_32.lib”)表示链接ws2_32.lib这个库。该库对应ws2_32.dll,提供了对某些网络相关API的支持,若使用其中的API,则应该将ws2_32.lib加入工程,如果不加入#pragma comment(lib,“ws2_32.lib”),则不能使用其中的API,即得不到相关API的支持。
(3)为什么在服务器和客户端程序中要使用WSAStartup函数,如果不用程序会有什么问题?
答:本函数必须是应用程序或DLL调用的第一个Windows Sockets函数.它允许应用程序或DLL指明Windows Sockets API的版本号及获得特定Windows Sockets实现的细节。应用程序或DLL只能在一次成功的WSAStartup()调用之后才能调用进一步的Windows Sockets API函数。如果不用应用程序或DLL就不能进一步的调用Windows Sockets API函数,程序就不能继续执行。
(4)如果服务器程序中没有memset(server.sin_zero, 0, sizeof(server.sin_zero));语句,程序会出现什么错误,为什么?
答:没有错误,注释这一条语句后,程序调试成功,实现访问。
(5)如果先运行客户端程序,程序会有什么现象,为什么会有这一现象?
答:程序跳出运行,并显示”can not creat connect!”因为没有相应的服务器与之创立链接。
(6)如果服务器程序所在计算机没有连接网络,程序会发生什么错误?我们捕获到什么错误信息?
答:如果服务器程序所在计算机没有链接网络,则执行程序后出现:
binding stream socket: No error Press any key to continue...(7)上述服务器是串行处理多个客户端的请求,如何该成并发处理的服务器? 答:用父进程调用accept,然后调用fork,这样,已连接套接口就在父进程与子进程间共享,一般来说,接下来便是子进程读、写已连接套接口并关闭侦听套接口,而父进程则关闭已连接套接口。
第二篇:计算机网络原理实验三
实验
三、套接字编程
1.实验目的:
两人一组,编写一个客户端、服务器程序,掌握Socket编程原理。2.实验环境:
连入局域网络的主机一台。3.实验指导:
Socket API是实现进程间通信的一种编程设施,也是一种为进程间提供底层抽象的机制。理解socket编程模型及其原理。4.实验分析,回答下列问题。
a.运行指导书中的程序,并修改服务器的功能(自己思考),改写成多线程web服务器(选作),附上源代码,并加关键代码注释。服务器:
#include “stdafx.h” #include
for(i=0;i<=1000;i++)//循环控制 { memset(buf, 0, sizeof(buf));if((rval = recv(msgsock, buf, sizeof(buf),0)< 0))perror(”reading stream message“);if(rval == 0)
printf(”%sn“, buf);} } closesocket(msgsock);} while(TRUE);closesocket(msgsock);
客户端:
#include ”stdafx.h“ #include
for(i=0;i<=1000;i++)//循环控制 { memset(buf, 0, 1024);scanf(”%s“,&buf);rval = send(fd, buf, strlen(buf)+ 1,0);if(rval < 0)printf(”Write error!“);} } closesocket(fd);exit(5);} return 0;
b.给出程序调试和运行的截图。
c.回答下列问题:
(1)为什么在服务器和客户端要包含winsock2.h文件?
答:用Winsock2 API,这样有助于对异步、非阻塞Socket编程机制的理解。为了简单起见,服务器端和客户端的应用程序均是基于MFC的标准对话框,网络通信部分基于Winsock2 API实现。
(2)为什么在服务器和客户端程序中要加入#pragma comment(lib,”ws2_32.lib")语句,如果不加会出现什么问题?
答:用该语句,指示编译当前单元时,linker会优先链接该preproccessor 指定的lib文件,这样等于就告诉编译器有这样一个lib文件可以去链接。如果不加就会出现类似“LNK2019: 无法解析的外部符号__imp__closesocket@4,该符号在函数_wmain 中被引用”的错误。
(3)为什么在服务器和客户端程序中要使用WSAStartup函数,如果不用程序会有什么问题?
答:使用Winsock库函数之前,必须先调用函数WSAStartup,该函数负责初始化动态连接库Ws2_32.dll.若ws2_32.dll尚未初始化,是无法调用WSAGetLastError.WSAStartup是任何使用Winsock的应用程序或者 DLL首先必须调用Winsock库函数.一方面它初始化 ws2_32.dll,另一方面他用于在应该程序DLL与系统Winsock库版本协商。所以,如果不用该函数程序将无法按照正常的情况进行。
(4)如果程序在Turbo C环境下运行,在服务器和客户程序中还需要上面的内容吗?
答:不需要。
(5)如果服务器程序中没有memset(server.sin_zero, 0,sizeof(server.sin_zero));语句,程序会出现什么错误,为什么?
答:此函数是为新申请的内存做初始化工作。如果去掉该语句在理论上面应该有错误,但是在我的实际操作中却没有错误,这个问题在我将继续深究。
(6)如果先运行客户端程序,程序会有什么现象,为什么会有这一现象?
答:无法连接。因为如果先运行客户端的话,没有服务器端等待,那么服务器端艰苦肯定无法给予响应,所以也就无法连接。
(7)如果服务器程序所在计算机没有连接网络,程序会发生什么错误?我们捕获到什么错误信息?
答:无法连接。会出现报错。
(8)上述服务器是串行处理多个客户端的请求,如何该成并发处理的服务器?
答:用父进程调用accept,然后调用fork,这样,已连接套接口就在父进程与子进程间共享,一般来说,接下来便是子进程读、写已连接套接口并关闭侦听套接口,而父进程则关闭已连接套接口。
5.实验环境:提供的Socket程序在visual c++ 2008中的设置(1)创建工程
(2)在应用程序开发中选择预编译头
(3)源程序有如下改变,winsock2.h windows.h头文件顺序要改变
#include
第三篇:计算机网络实验三报告
实验三 交换机配置
一、实验目的
1、掌握交换机在网络中的作用及交换机设备的选型。
2、掌握交换机的工作原理。
3、掌握利用超级终端对交换机配置的过程。
4、掌握Cisco2950交换机的基本配置方法,了解各交换机配置命令的作用。
二、实验属性
验证性实验。
三、实验仪器设备及器材 硬件环境:Cisco 2950交换机、Windows操作系统的PC机,有关连接线。2 软件环境 Windows xp操作系统,Packet Tracer 5仿真软件
四、实验要求
1、熟练掌握Cisco交换机基本配置命令及各命令的作用。
2、试验中正确使用仪器设备,独立操作。
3、试验后按规定要求写出实验报告。
五、实验内容和步骤
1、终端控制台(console口)的连接和配置 PC机作为控制终端使用,用翻转线连接PC机的串口与交换机的console口,Pcaket Tracer仿真软件中实验图如图1,可以多连接几台PC机,其中连线选用console,连接PC机的RS232接口。
图1 Pcaket Tracer仿真实验图
(1)“开始”菜单“程序”→“附件”→“通信”→“超级终端”打开超级终端。(2)新建连接,选择PC机使用的串口(本实验为COM1),并将该串口设置为波特率9600波特、数据位8位、奇偶校验位无、停止位1位、数据流控制无。或者直接点击“还原为默认值”即可;如图2所示。
图2 com1属性对话框 图3 超级终端登陆界面
以上两步在packet tracer软件操作为:鼠标点击PC,然后选择“Desktop”,再点击tenminal。(3)进入超级终端程序后,单击“回车”键,系统将收到交换机的回送信息,如图3。
2、交换机配置模式及帮助
交换机配置模式是用于不同级别的命令对交换机进行配置,同时提供了一定的安全性、规范性。
3、交换机工作模式切换
(1)登陆交换机,进入用户模式。连接交换机并且登陆。请注意现在交换机上的显示符号。显示如下:Switch>
(2)使用命令(?)查看在用户模式下所支持的命令。
Exec commands: <1-99> Session number to resume connect Open a terminal connection disconnect Disconnect an existing network connection enable Turn on privileged commands exit Exit from the EXEC logout Exit from the EXEC ping Send echo messages resume Resume an active network connection show Show running system information telnet Open a telnet connection terminal Set terminal line parameters traceroute Trace route to destination(3)进入特权模式,输入(enable)。如果交换机有密码保护那么此时需要输入确认密码。注意现在的提示符和用户模式的差别,Switch#(4)使用命令(?)查看在特权模式下所支持的命令,注意和用户模式下的区别。
Exec commands: <1-99> Session number to resume clear Reset functions clock Manage the system clock configure Enter configuration mode connect Open a terminal connection copy Copy from one file to another debug Debugging functions(see also 'undebug')delete Delete a file dir List files on a filesystem disable Turn off privileged commands disconnect Disconnect an existing network connection enable Turn on privileged commands erase Erase a filesystem exit Exit from the EXEC logout Exit from the EXEC more Display the contents of a file no Disable debugging informations ping Send echo messages 2 reload Halt and perform a cold restart resume Resume an active network connection setup Run the SETUP command facility(5)进入全局配置模式,输入命令(configure terminal 或 config t)。提示符显示如下:Switch(config)#(6)使用命令(?)查看在全局配置模式下所支持的配置命令。
Configure commands: banner Define a login banner boot Boot Commands cdp Global CDP configuration subcommands clock Configure time-of-day clock do To run exec commands in config mode enable Modify enable password parameters end Exit from configure mode exit Exit from configure mode hostname Set system's network name interface Select an interface to configure ip Global IP configuration subcommands line Configure a terminal line mac-address-table Configure the MAC address table no Negate a command or set its defaults service Modify use of network based services spanning-tree Spanning Tree Subsystem username Establish User Name Authentication vlan Vlan commands vtp Configure global VTP state(7)退出全局配置模式,使用快捷键(Ctrl+Z)退出全局配置模式,进入特权模式。也可以使用命令(exit)退出全局配置模式。
(8)退出特权模式,使用命令(disable)从特权模式会到用户模式。
(9)退出交换机,使用命令(exit)退出交换机。这个命令可以用来从特权模式中退出交换机。
4、交换机名称、口令设置
(1)通过超级终端进入交换机,并进入全局模式,键入命令:
Switch(config)#hostname switch2950 Switch2950(config)# 交换机的命令提示行的名称由Switch更改为Switch2950。
(2)全局模式下,设定明文口令cisco,此口令可以限制对特权模式的访问。在配置文件中可以看见口令。
Switch2950(config)#enable password cisco(3)全局模式下,设定加密口令Cisco,此口令可以限制对特权模式的访问。
Switch2950(config)#enable secret cisco(4)接口模式下,设定控制台终端的登陆口令为cisco。
Switch2950(config)#line console 0 //进入接口模式 Switch2950(config-line)#login //会提示设置密码
Switch2950(config-line)#password cisco(5)接口模式下,设定远程登陆口令为cisco Switch2950(config)#line vty 0 4 Switch2950(config)#login Switch2950(config)#password cisco 注:vty 0 4 是5个不同的虚拟终端连接。
(6)以上口令设置中,除了enable secret设置加密口令外,其余均可通过show run命令在配置文件中查看。可以通过全局命令将明文口令加密。
Switch2950(config)#service password-encryption(7)交换机命令历史,Cisco交换机会保存输入过的命令,并可以对保存的命令的个数进行设置,同时可以再次通过快捷方式进行使用,这在再次输入很长或很复杂的命令时很有用。缺省情况下,系统会保存10条命令,最大可以设置256条命令。
设置命令行数为100 Switch2950#terminal history size 100(8)任何时候可以使用show running-config命令查看命令配置,可以在特权模式下使用copy running-config startup-config命令保存配置。
5、交换机VLAN设定
(1)在Cisco 2950上定义三个VLAN,分别取名为engineer , account, manager;Switch#vlan database VLAN 3 added: Name: engineer Switch(vlan)#vlan 4 name account VLAN 4 added: Name: account Switch(vlan)#vlan 5 name manager VLAN 5 added: Name: manager Switch(vlan)#apply
//进入vlan配置模式,database为虚拟局域网编号
Switch(vlan)#vlan 3 name engineer //定义vlan名称及vlan号
(2)将端口12-15 加入到engineer 当中,端口16-18 加入到account 当中,端口24 加入到manager 当中。
Switch(config)#interface range fastEthernet 0/12 – 15 //将端口12-15加入到vlan中
Switch(config-if-range)#switchport mode access Switch(config-if-range)#switchport access vlan 3 Switch(config-if-range)#interface range fastethernet 0/16-18 Switch(config-if-range)#switchport mode access Switch(config-if-range)#switchport access vlan 4 Switch(config)#interface fastethernet 0/24 //将一个端口加入到vlan中,单端口模式 Switch(config-if)#switchport mode access Switch(config-if)#switchport access vlan 5(3)返回到特权模式,用 show vlan查看vlan情况。
第四篇:数据库原理实验三
数据库原理及应用实验报告
实验名称:存储过程 实验类型:验证型 实验环境:oracle 11g 指导教师:陈 骏 专业班级:信安1505班 姓
名:
学
号:512015 联系电话:电子邮件: 实验地点:东6E501 实 验 日 期: 2017年5月10日 实验报告日期:2017年 5月 11日
成绩:__________________________
一、实验目的
(1)了解存储过程的概念、优点
(2)熟练掌握创建存储过程的创建方法(3)熟练掌握存储过程的调用方法
二、实验平台
Oracle 11g
三、实验步骤、出现的问题及解决方案(不能解决的将问题列出)(1)实验步骤
1)建立存储过程完成图书管理系统中的借书功能。
功能要求:
借书时要求输入借阅流水号,借书证号,图书编号。(即该存储过程有3个输入参数)
借书时,借书日期为系统时间。 图书的是否借出改为‘是’
2)建立存储过程完成图书管理系统中的预约功能。 预约时要求输入预约流水号,借书证号,ISBN。(即该存储过程有3个输入参数)
存储过程先检查输入的ISBN版本的图书是否都已借出,如果是则进行预约,否则提示“该书目有可借图书,请查找”。 预约时间为系统时间。
3)建立存储过程完成图书管理系统中的还书功能。
还书时要求输入借书证号,图书编号,罚款分类号(即该存储过程有3个输入参数)。
还书日期为系统时间。 图书的是否借出改为‘否’。
(2)问题及解决方案
1)问题一:步骤一无法执行
原因:已创建的table中无“借书”项
解决方案:将原代码中的“借书”改为“借阅” 2)问题二:步骤二中出现无法识别的符号 原因:将英文分号误写为中文分号
解决方案:修正为英文分号“;”
四、思考与总结
(1)书写存储语句时,应注意涉及的表格和属性名应与创建表格时相同(2)注意区分中英文符号,避免出现符号无法识别以及程序没有结尾等错误(3)注意空格的使用,避免出现缺少或多余的空格,造成语法错误
五、附:实验完整源代码
1、CREATE OR REPLACE PROCEDURE PRO_借书功能(VAL_借阅流水号 IN 借阅.借阅流水号%TYPE, VAL_借书证号 IN 借阅.借书证号%TYPE, VAL_图书编号 IN 借阅.图书编号%TYPE)AS BEGIN INSERT INTO 借阅(借阅流水号,借书证号,图书编号,借书日期)VALUES(VAL_借阅流水号,VAL_借书证号,VAL_图书编号,TO_CHAR(SYSDATE(),'YYYY/MM/DD'));UPDATE 图书 SET 是否借出='是' WHERE 图书.图书编号 =VAL_图书编号;DBMS_OUTPUT.PUT_LINE(' 本次借书操作完成!');END;
2、CREATE OR REPLACE PROCEDURE PRO_预约功能(Y_预约流水号 IN 预约.预约流水号%TYPE, Y_借书证号 IN 预约.借书证号%TYPE, Y_ISBN IN 图书.ISBN%TYPE)AS Y_NUMBER BINARY_INTEGER;BEGIN SELECT COUNT(*)INTO Y_NUMBER FROM 图书 WHERE 图书.ISBN=Y_ISBN AND 图书.是否借出='否';IF Y_NUMBER=0 THEN INSERT INTO 预约(预约流水号,借书证号,ISBN,预约时间)VALUES(Y_预约流水号,Y_借书证号,Y_ISBN,TO_CHAR(SYSDATE(),'YYYY/MM/DD'));DBMS_OUTPUT.put_line('可执行预约!');ELSE DBMS_OUTPUT.put_line('该书可借,请查找!');END IF;END;
3、CREATE OR REPLACE PROCEDURE PRO_还书功能(VAL_借书证号 IN 借阅.借书证号%TYPE, VAL_图书编号 IN 借阅.图书编号%TYPE, 4 VAL_罚款分类号 IN 借阅.罚款分类号%TYPE)AS VAL_TIME DATE;BEGIN SELECT SYSDATE INTO VAL_TIME FROM DUAL;UPDATE 借阅 SET 归还日期=VAL_TIME WHERE 借书证号 =VAL_借书证号 AND 借阅.图书编号=VAL_图书编号;UPDATE 图书 SET 是否借出='否' WHERE 图书.图书编号 =VAL_图书编号;UPDATE 借阅 SET 罚款分类号=VAL_罚款分类号 WHERE 借书证号 =VAL_借书证号 AND 借阅.图书编号=VAL_图书编号;DBMS_OUTPUT.PUT_LINE(' 本次还书操作完成!END;
');
数据库原理及应用实验报告
实验名称:触发器 实验类型:验证型 实验环境:oracle 11g 指导教师:陈 骏 专业班级:信安1505班 姓
名:李 维 学
号:5120155364 联系电话:*** 电子邮件: 实验地点:东6E501 实 验 日 期: 2017年5月10日实验报告日期:2017年 5月 10日
成绩:__________________________
一、实验目的
(1)了解触发器的概念、优点(2)掌握触发器的方法和步骤(3)掌握触发器的使用
四、实验平台
Oracle 11g
五、实验步骤、出现的问题及解决方案(不能解决的将问题列出)(3)实验步骤
1)通过序列和触发器实现借阅表中借阅流水号字段的自动递增。
2)通过序列和触发器实现预约表中预约流水号字段的自动递增
3)修改实验三借书功能的存储过程。
该存储过程要求: 借书时输入借书证号,图书编号。(即该函数有2个输入参数)
借书时,借书日期为系统时间。
*该存储过程主体部分只有insert into语句。
4)建立与借书存储过程相对应的触发器,当借阅表中加入借阅信息时,该触发器触发,自动修改所借图书的是否借出改为‘是’。
5)修改实验三还书功能的存储过程。
该存储过程要求:
还书时输入借书证号,图书编号。(即该函数有2个输入参数) 还书时,还书日期为系统时间。
*该存储过程主体部分只有一条UPDATE语句。
6)建立与还书存储过程相对应的触发器,当借阅表中填入还书日期时,该触发器触发,自动修改所还图书的是否借出为‘否’。
2(4)问题及解决方案
1)问题一:步骤一中无法识别“seq_id”标识符 原因:未创建seq_id序列 解决方案:先创建该序列
2)问题二:步骤3无法执行
原因:已创建的table中无“借书”项
解决方案:将原代码中的“借书”改为“借阅” 3)问题三:步骤二中出现无法识别的符号 原因:将英文分号误写为中文分号 解决方案:修正为英文分号“;” 4)问题四:
原因:变量赋值过程中使用了错误的赋值语句 解决方案:将bnum改为图书编号
五、思考与总结
(4)在创建trigger之前应先创建sequence,避免出现序列号无法识别的错误(5)书写存储语句时,应注意涉及的表格和属性名应与创建表格时相同(6)注意区分中英文符号,避免出现符号无法识别以及程序没有结尾等错误(7)注意区别where和having的用法
(8)注意空格的使用,避免出现缺少或多余的空格,造成语法错误
六、附:实验源代码
(1)create sequence seq_借阅 start with 8 increment by 1 nomaxvalue nocycle nocache;create or replace trigger tr_借阅流水号 before insert on 借阅 for each row
begin
select seq_借阅.nextval into :new.借阅流水号 from dual;
end;
(2)create sequence seq_预约 start with 8 increment by 1 nomaxvalue nocycle nocache;create or replace trigger tr_预约流水号 before insert on 预约 for each row
begin
select seq_预约.nextval into :new.预约流水号 from dual;
end;
(3)create or replace procedure p_borrow_book_xg(p_jszh in number,p_tsbh in number)as v_sfjc 图书.是否借出%type;begin
select 是否借出 into v_sfjc from 图书 where 图书编号=p_tsbh;
if v_sfjc='否' then
insert into 借阅(借书证号,图书编号,借书日期)
values(p_jszh,p_tsbh,to_date(to_char(sysdate,'YYYY/MM/DD'),'YYYY/MM/DD'));
--update 图书 set 是否借出='是' where 图书编号=p_tsbh;
commit;
else
dbms_output.put_line('该图书已经借出!');
end if;end;(4)create or replace trigger tr_借书 before insert on 借阅 for each row
begin
if inserting then
update 图书 set 是否借出='是' where 图书编号=:new.图书编号;
select seq_借阅.nextval into :new.借阅流水号 from dual;
end if;
end;(5)create or replace procedure p_return_图书(p_借书证号 in number,p_图书编号 in number)as begin
update 借阅 set 归还日期=to_date(to_char(sysdate,'YYYY/MM/DD'),'YYYY/MM/DD'),罚款分类号=p_罚款分类号 where 借书证号=p_借书证号 and 图书编号=p_图书编号;
update 图书 set 是否借出='否' where 图书编号=p_图书编号;
commit;
end;(6)create or replace trigger tr_还书
after update
on 借阅
for each row begin
if updating then
update 图书 set 是否借出 = '否' where 图书编号 = :new.图书编号;
end if;end;
第五篇:计算机网络原理实验三winsock套接字编程实验报告
实验
三、WINSOCK套接字编程实验报告
序号:姓名:学号:成绩
1.实验目的:
用C或JAVA语言编写客户端、服务器程序,实现基于TCP或UDP的网络通信数据传输服务,熟悉基于TCP或UDP的Socket编程原理。
2.实验环境:
建立在TCP/IP 网络体系结构之上计算机网络实验环境。各计算机除了安装TCP/IP 软件外,还安装了TCP/IP 开发系统。计算机具备Windows环境中套接字socket 的编程接口功能,可为用户提供全网范围的进程通信功能。
3.实验指导:
参见套接字编程实验指导
4.实验步骤
(1)运行指导书中给出的参考程序,分析实验结果,并回答问题(1)-(3)
(2)根据给定参考程序修改代码,完善修改服务器和客户端的功能。并回答问题(4)-(5)
5.实验结果分析
(1)为什么在服务器和客户端要包含winsock2.h文件?
(2)为什么在服务器和客户端程序中要加入#pragma comment(lib,“ws2_32.lib”)
语句,如果不加会出现什么问题?
(3)为什么在服务器和客户端程序中要使用WSAStartup函数,如果不用,程序会有
什么问题?
(4)修改后的程序完成实现了什么功能,附上修改后的源代码。(修改或填加的代
码用波浪线标注,并填加注释),并附上实验截图
(5)请详细说明此实验在设计及运行时遇到的问题和解决办法,及实验体会及建议。