西工大计算机网络实验三
西工大模电实验报告
2014模拟电子实验总结报告计算机学院姓名:刘凯目录实验一:晶体管单级放大器 (3)一、实验目的 (3)二、实验原理 (3)三、实验内容 (4)四、实验结果 (5)实验二:多级负反馈放大器的研究 (6)一、实验目的 (6)二、实验原理 (6)三、实验内容 (10)四、实验结果 (11)实验三:功率放大器 (17)一、实验目的 (17)二、实验原理 (17)三、实验内容 (18)四、实验结果 (19)实验四:RC文氏电桥振荡器 (23)一、实验目的 (23)二、实验原理 (23)三、实验内容 (24)四、实验结果 (25)实验五:有源滤波器 (26)一、实验目的 (26)二、实验原理 (26)三、实验内容 (27)四、实验结果 (28)实验六:电压比较器与矩形波发生器 (29)一、实验目的 (29)二、实验原理 (29)三、实验内容 (31)四、实验结果 (32)实验七: (35)一、实验目的 (35)二、设计要求 (35)三、实验原理 (35)四、电路设计 (39)五、电路元器件选择 (39)六、实验结果 (40)七、注意事项 (41)实验一:晶体管单级放大器一、实验目的(1)掌握晶体管放大器静态工作点的测试和调整方法,观察静态工作点的对放大器输出的影响(2)测量放大器的放大倍数、输出电阻,输入电阻二、实验原理实验电路如图所示,采用基极固定分压式偏置电路。
电路在接通直流电源Vcc而未加入信号(Vi=0)时,三极管三个极电压和电流称为静态工作点即1、放大器静态工作点的选择和测量放大器的基本任务是不失真的放大小信号。
为了获得最大不失真输出电压,静态工作点应选在输出特性曲线上交流负载线的中点。
若工作点选的太高,则容易引起饱和失真,而选的太低,又易引起截止失真。
静态工作点的测量是指在接通电源电压后放大器输入端不加信号时,测量晶体管的集电极电流ICQ和管压降VCEQ。
其中VCEQ可直接用万用表直流电压档测C-E,极间的电压既得,而ICQ的测量则有直接法和间接法两种:(1)直接法:将万用表电流档串入集电极电路直接测量。
西工大信号与系统上机实验3
上机实验3 连续LTI 系统的频域分析 一、实验目的 (1)掌握连续时间信号傅立叶变换和傅立叶逆变换的实现方法,以及傅立叶变换的时移特性,傅立叶变换的频移特性的实现方法; (2)了解傅立叶变换的特点及其应用; (3)掌握函数fourier 和函数ifourier 的调用格式及作用; (4)掌握傅立叶变换的数值计算方法,以及绘制信号频谱图的方法。
二、实验内容与方法1.验证性实验(1)傅立叶变换。
已知连续时间信号()2t f t e -=,通过程序完成()f t 的傅立叶变换。
MATLAB 程序:syms t;f=fourier(exp(-2*abs(t)));ezplot(f);运行结果如下:试画出()()323t f t e U t -=的波形及其幅频特性曲线。
MATLAB 程序:Syms t v w ff=2/3*exp(-3*t)*sym(‘Heaviside(t)’);F=fourier(f);subplot(2,1,1);ezplot(f);subplot(2,1,2);ezplot(abs(F));信号()()323t f t e U t -=的波形及其幅频特性曲线如图所示:(2)傅立叶逆变换。
已知()211f t ω=+,求信号()F j ω的逆傅立叶变换。
MATLAB 程序:syms t wifourier(1/(1+w^2),t)结果如下:()()()()11*exp **exp *22ans t U t t U t =-+ (3)傅立叶变换数值计算。
已知门函数()()()()211f t g t U t U t ==+--,试采用数值计算方法确定信号的傅立叶变换()F j ω。
MATLAB 程序:R=0.02;t=-2:R:2;f=stepfun(t,-1)-stepfun(t,1);W1=2*pi*5;N=500;k=0:N;W=k*W1/N;F=f*exp(-j*t'*W)*R;F=real(F);W=[-fliplr(W),W(2:501)];F=[fliplr(F),F(2:501)];subplot(2,1,1);plot(t,f); axis([-2,2,-0.5,2]);xlabel('t');ylabel('f(t)'); title('f(t)=U(t+1)-U(t-1)');subplot(2,1,2);plot(W,F); axis([-40,40,-1,2]);title('f(t)的傅立叶变换');ylabel('F(w)');xlabel('w');信号的傅立叶变换如图:(4)连续函数的傅立叶变换。
西工大计算机网络作业3
1.当两台计算机分别和中继器、二层交换机、三层交换、路由器相连时,请分别画出计算机与交换设备五层参考模型;计算机1上图为计算机和路由器连接.。
三层交换机与上图连接相同。
二层路由器与计算机连接只经过数据链路层和物理层,中继器与计算机连接只经过物理层。
2.学习SOCKET编程,写出TCP、UDP通信流程;将实例程序两个同学一组,实现两台计算机之间通信。
并写出学习报告;TCP通信流程客户端服务器UDP通信流程客户端服务端利用socket实现TCP,UDP通信的流程如上图所示。
SOCKET实验报告一.实验目的学习SOCKET编程,理解计算机通信的流程,分别实现TCP,UDP协议下两台计算机之间的通信。
Socket编程机制客户端:(1)客户端程序在运行后,首先需要使调用WSAStartup 函数,确保进程加载socket 应用程序所必须的环境和库文件,如Ws2_32.dll。
(2)调用函数Socket 创建SOCKET,在创建时需指定使用的网络协议、连接类型等。
(3)填充SOCKADDR 结构,指定服务端的地址、端口等。
(4)调用connect 函数连接到服务端。
(5)如果连接成功,就可以使用send 和recv 函数发送和接收数据。
(6)在数据传输完成后,可调用closesocket 函数关闭Socket。
(7)调用WSACleanup 函数释放资源。
服务端:(1)程序在运行后,首先需要使调用WSAStartup 加载Ws2_32.dll。
(2)调用函数socket 创建用于监听的SOCKET,在创建时需指定使用的网络协议、连接类型等。
(3)1 调用bind 函数将Socket 绑定到网络地址和端口。
(4)调用listen 函数开始监听。
(5)调用accept 函数等待客户端连接。
在客户端连接后,accept 函数返回,得到连接Socket。
在accept 函数返回后,可立即再调用,以处理其他客户端的连接。
西北工业大学计算机网络实验报告3
题目:1、修改udp实验程序完成两台电脑通讯2、修改tcp实验程序完成两台电脑通讯3、修改IP源代码实现只调用一个函数**: ***学号:**********班号:10011303时间:2015-12-25计算机学院目录摘要1 目的 .................................................... 错误!未定义书签。
2 要求 (1)3 相关知识 (1)4 实验内容及过程................................. 错误!未定义书签。
5参考文献 .. (4)1、实验目的1.学习UDP和TCP及IP的通讯原理。
2.掌握Socket的编程方法。
3.培养学生自己的创新实验的能力。
4、训练修改实验代码能力。
2、实验要求1、熟悉UDP和TCP通讯的原理及socket编程。
2、自己修改UDP和TCP协议代码中的错误部分,完成两台电脑之间通讯。
3、修改IP源代码使所有外部调用函数都放在一个主函数里面。
3、相关知识1、UDP协议UDP协议[2]的全称是用户数据包协议[3],在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。
在OSI模型中,在第四层——传输层,处于IP协议的上一层。
UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。
UDP用来支持那些需要在计算机之间传输数据的网络应用。
包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。
UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在现在,UDP仍然不失为一项非常实用和可行的网络传输层协议。
与所熟知的TCP(传输控制协议)协议一样,UDP协议直接位于IP(网际协议)协议的顶层。
根据OSI(开放系统互连)参考模型,UDP和TCP都属于传输层协议。
UDP协议的主要作用是将网络数据流量压缩成数据包的形式。
西工大机电学院上机实习实验报告
C 语言上机实习2. C 基本程序设计与调试 2.1使用选择结构的程序设计 【实验目的】1. 进一步掌握各种表达式的使用。
2. 利用if 语句实现选择结构。
3. 利用switch 语句实现多分支选择结构。
【实验内容】1. 计算下列分段函数值:其他及且且321003-01656)(222≠≠<<=≠<⎪⎩⎪⎨⎧--+--+=x x x x x x x x x x x x f具体要求如下:1) 用if 语句实现分支。
2) 用scanf 函数输入,且输入前输入后有提示。
【算法与流程图】算法:采用分支结构,根据x 的不同范围进行对应的函数运算。
流程图如下:开始x<0且x ≠-30<=x<10且x ≠3及x ≠2f(x)=x²+x-6f(x)=x²-5x+6f(x)=x²-x-1输出F(x)结束输入x否是否是【程序清单】#include <stdio.h> int main() { float x,y; printf("x="); scanf("%f",&x);if ((x<0)&&(x!=-3)){y=x*x+x-6;}else if ((x>=0)&&(x<10)&&(x!=2)&&(x!=3)){y=x*x-5*x+6;}elsey=x*x-x-1;printf("f(x)=%f",y);}【运行结果】【调试分析和体会】题目考查了选择结构分支语句。
2.2循环结构的程序设计【实验目的】1.进一步练习选择结构的程序设计及实现循环结构的三种方法。
2.练习并掌握选择结构与循环结构的嵌套,调试与修改程序。
【实验内容】1.计算并输出500以内最大的10个素数及其之和。
具体要求如下:1)输出要有文字说说明,并同时输出各素数。
计算机网络实验3报告
实验报告姓名:XX学号:201430XXXX班级:1001XXXX指导教师:XXXX时间:2016.11.161.实验名称SOCKET编程2.实验目的实现两台计算机之间TCP/UDP通信(1)在一台机器上同时运行客户端和服务器端;(2)在两台PC上分别运行客户端和服务器端;3.实验原理Socket 是应用程序进程和运输层协议之间的接口。
Socket 其实是一个API,源IP 地址和目的IP 地址以及源端口号和目的端口号的组合称为套接字。
其用于标识客户端请求的服务器和服务。
它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP 地址,本地进程的协议端口,远地主机的IP 地址,远地进程的协议端口。
TCP 通信流程:TCP 是面向连接的协议,通信的双方必须事先建立连接,才能进行通信。
在通信时,服务器和客户端之间仿佛有一个管道,当通信结束时,管道才会断开。
双方都是将数据以流的形式送入管道。
具体流程如下图所示。
1) 两个进程之间没有进行初始握手,因此socket 编程时不需要建立“欢迎”套接字;2) 没有流与套接字相关联;3) 发送主机将目的IP 地址和端口号与它发送的每批字节相联系,形成分组;4) 接收进程必须拆开每个所接收到的分组,获取该分组的字节信息。
5) UDP 提供的是尽力而为的不可靠服务,而TCP 提供的是可靠服务。
4.实验方法及具体步骤首先查看客户端和服务端电脑的IP 地址,win+R,输入>>cmd>>ipconfig 查询ip地址如下图所示:将客户端和服务器端分别填上对方的IP地址用 TCP 通信,客户端发送消息,服务器端接收消息:用UDP 通信,客户端发送消息,服务器端接收消息:5.实验中遇到的问题1.老师给的代码有些问题,比如#include<iostream>写成#include<iostream.h>,用coodblocks打开发现Break 少写分号,用VS2015 试了一下,会自动添加,并没有出错,Main函数返回值写成老式写法,返回void,改为返回int。
西工大《信号与系统》实验报告
西北工业大学信号与线性系统实验报告学院:班级:姓名学号:实验一 常用信号的分类与观察一、实验内容观察常用信号的波形特点及其产生方法;使用示波器对常用波形测量参数;掌握JH5004信号产生模块的操作;对于一个系统特性的研究,其中重要的一个方面是研究它的输入输出关系,即在一特定输入信号下,系统对应的输出响应信号。
因而对信号的研究是对系统研究的出发点,是对系统特性观察的基本手段与方法。
在本实验中,将对常用信号和特性进行分析、研究。
信号可以表示为一个或多个变量的函数,在这里仅对一维信号进行研究,自变量为时间。
常用的信号有:指数信号、正弦信号、指数衰减正弦信号、复指数信号、Sa (t )信号、钟形信号、脉冲信号等。
1、 指数信号:指数信号可表示为at Ke t f =)(。
对于不同的a 取值,其波形表现为不同的形式,如下图所示:在JH5004“信号与系统”实验平台的信号产生模块可产生a<0,t>0的at ke函数的波形。
通过示波器测量输出信号波形,测量at ke 函数的a 、K 参数。
2、 正弦信号:其表达式为)sin()(θ+⋅=t w K t f ,其信号的参数有:振幅K 、角频率w 、与初始相位θ。
其波形如下图所示:通过示波器测量输出信号测量波形,测量正弦信号的振幅K 、角频率w 参数。
3、 指数衰减正弦信号:其表达式为⎩⎨⎧><=-)0()0(0)(t Ke t t f at ,其波形如下图:4、 复指数信号:其表达式为)sin()cos()()(wt e jK wt e K e K e K t f t t t jw st ⋅⋅+⋅⋅=⋅=⋅=+σσσ一个复指数信号可分解为实、虚两部分。
其中实部包含余弦衰减信号,虚部则为正弦衰减信号。
指数因子实部表征了正弦与余弦函数振幅随时间变化的情况。
一般0<σ,正弦及余弦信号是衰减振荡。
指数因子的虚部则表示正弦与余弦信号的角频率。
西工大计算机实习报告
计算机实习报告一、趣味题彩色的圆环:分析图形可知,一共有 n 个同心圆,外面大圆 n 等分,然后从每个等分点作全部同心圆的两条切线。
如果用极坐标表达,能够很容易求解切点,代码以下所示:n=10; %同心圆数量m=40; %等分点数R=1; %外圆半径s=0:0.01*pi:2*pi; %控制圆的光滑程度的极坐标角度t=0:2*pi/m:2*pi; %等分点极坐标角度x0=R*cos(t);y0=R*sin(t); %等分点直角坐标color=['b','r','c','g','m','y']; %画图颜色lc=length(color); %颜色数量长度,超出后从头开始for i=1:n %开始同心圆循环r=R/n*i; %现在同心圆半径a=acos(r/R); %切线与圆心线角度(弧度制)x1=r*cos(t-a);y1=r*sin(t-a); %任意等分点相对现在同心圆的第一种切点x2=r*cos(t+a);y2=r*sin(t+a); %任意等分点相对现在同心圆的第二个切点plot(r*cos(s),r*sin(s),color(mod(i,lc)+1));hold on; %画同心圆for j=1:m %对每一种等分点循环plot([x0(j),x1(j)],[y0(j),y1(j)],color(mod(i,lc)+1));hold on;%第一条切线plot([x0(j),x2(j)],[y0(j),y2(j)],color(mod(i,lc)+1));hold on;%第二条切线endendaxsi equal;%横纵坐标比例一致实验绘图成果以下图所示:二、算法题求无向图的最短途径(D i j k s t r a算法):实验原理分析、原理及代码以下所示(此实验代码不仅包含了实验所规定的求带权无向图最短途径,我还拓展了求有向、无向、带权有向图最短途径的内容):#i n c l u d e<i o s t r ea m>#i n c l u d e<i o m a n i p>u s i n g namespace s t d;#d e f i n e w u q i o n g0class tu{p u b li c:i n t c h a z h a o(i n t);//查找v o i d z j d i n gd i a n(i n t x);//增加顶点t u();v o i d z e n g j i a();//控制增加弧边和点v o i d z j hu b i a n();//增加弧边v o i d b i a n li();//控制遍历v o i d s h e n d u(i n t );//深度v o i d g u a n gd u(i n t );//广度v o i d j i n d u i(i n t );//进队列i n t c hudu i();//出对了boo l p a n k on g();//判空//上面全部的函数与邻接矩阵有关v o i d z x go u z a o();//初始化与最小路劲有关的东东v o i d z x s hu c hu();//求 S 中的最小路劲p r i va t e:i n t k i nd; //类图;i n t l e ng t h;// 顶点个数i n t *d i n gd i a n;//顶点i n t *j u z h e n;//矩阵i n t nu m;//最大顶点数目i n t*v i s t e d;//访问状况i n t *d u ili e;//模拟队列i n t d u i c h a n g;//队列长度//上面全部的变量与邻接矩阵有关i n t*s;//寄存现在顶点i n t s l e n g t h;//现在顶点的长度i n t*d i s t;//寄存最小路劲i n t*p r e;//寄存路劲;i n t*f i n a l;//寄存顶点};t u::t u()//初始化图{cout<<"请输入图的种类1:有向.2:无向.3:带权有向.4:带权无向"<<e n d l;//图的种类c i n>>k i n d;cout<<"请输入图的顶点数目"<<e n d l;//为顶点赋值c i n>>nu m;d i n gd i a n = new i n t[nu m];//为顶点分派内存保存j u z h e n =new i n t[nu m*nu m];//产生矩阵i f(k i n d==1||k i n d==2)//为无权图初始化矩阵{f o r(i n t i =0;i<nu m*nu m;i++)j u z h e n[i]= 0;}else//有权图初始化矩阵{f o r(i n t i =0;i<nu m*nu m;i++)j u z h e n[i]= w u q i on g;}l e n g t h = 0;}//增加顶点v o i d t u::z j d i n gd i a n(i n t x){i f(c h a z h a o(x)!=-1||l e n g t h==nu m)cout<<"图内有此顶点或图内无空间可插入,插入失败"<<e nd l;else{d i n gd i a n[le n g t h]= x;l e n g t h++;}}//增加边v o i d t u::z j hu b i a n(){i n t i;//弧头i n t j;//弧尾i f(k i n d==1||k i n d==2)//无权图{cout<<"请输入弧的头和尾"<<e n d l;c i n>>i>>j;i f(k i n d== 1)//有向图{j u z h e n[i*nu m+j]=1;}else//无向图,两边同时取值{j u z h e n[i*nu m+j]=1;j u z h e n[j*nu m+i]=1;}}else//权值,同上,将 1 改为 K(权值)即可{i n t k;c i n>>i>>j>>k;i f(k i n d== 3){j u z h e n[i*nu m+j]=k;}else{j u z h e n[i*nu m+j]=k;j u z h e n[j*nu m+i]=k;}}}//查找,将该数所在位置返回,若无则返回-1i n t t u::c h a z h a o(i n t x){f o r(i n t i =0;i<l e ng t h;i++)if(x == i)return i;return -1;}//控制遍历函数v o i d t u::b i a n li()//遍历函数{cout<<"该图的邻接矩阵为:";i n t i;int j;f o r(i=0;i<l e ng t h;i++)//将矩阵输出{c o u t<<e nd l;f o r(j=0;j<l e ng t h;j++)c o u t<<s e t w(6)<<j u z h e n[i*l e n g t h+j]<<" ";}c o u t<<e nd l;v i s t e d =new i n t[l e ng t h];//为设立访问状态定义内存空间cout<<"深度搜索:";f o r(i=0;i<l e ng t h;i++)//全部初始化为 0 即未访问状态v i s t e d[i]=0;s h e n d u(0);//将0作为0点运用深度访问函数c o u t<<e nd l;cout<<"广度搜索:";f o r(i=0;i<l e ng t h;i++)//重新设立访问状态v i s t e d[i]=0;d u ili e= new i n t[le ng t h+1];d u ili e[0]=-1;//队列初始化d u i c h a n g=0;g u a n gd u(0);//将0作为0点运用广度访问函数}//深度遍历v o i d t u::s h e n d u(i n t x)//采用递归的手法{i n t p;v i s t e d[x]=1;//访问后置 1 避免重复访问cout<<x<<"";p = x*l e n g t h+1;w h il e(p%l e n g t h!=0){i f(j u z h e n[p]!=0&&v i s t e d[p%l e n g t h]!=1)s h e n d u(p%l e n g t h);p++;}}//广度遍历v o i d t u::g u a n gd u(i n t x){i n t p;v i s t e d[x]=1;cout<<x<<"";p=l e n g t h*x+1;w h il e(p%l e n g t h!=0)//没有遍历属于根节点的后裔的全部兄弟结点加入到队列中(这样能够先进先出,后来的子代加入后也是先输出父亲结点){i f(j u z h e n[p]!=0&&v i s t e d[p%l e n g t h]!=1){v i s t e d[p%l e n g t h]=1;//判断与否已经加入队列或访问j i n d u i(p%l e n g t h);}p++;//进行下一种判断}w h il e(p a n k on g())//加入全部的子代兄弟节点后现在出队列并且访问,访问的方式一致会访问后优先加入其子代结点然后出队列访问{g u a n gd u(c hu d u i());}}//进队列,在队头插入一种函数,这个出队入队为了广度输出v o i d t u::j i n d u i(i n t x){d u ili e[d u i c h a n g+1]= -1;d u ili e[d u i c h a n g]= x;du i c h a ng++;}//出队列,将队列中的最后一种数返回i n t t u::c hu d u i(){int j;j =du ili e[0];f o r(i n t i=0;i<d u i c h a n g;i++)d u ili e[i]=d u ili e[i+1];d u i c h a n g--;return j;}//判空函数,函数为空的时候返回 0boo l t u::p a n k o n g(){i f(d u i c h a n g == 0)return f a l s e;elsereturn t r u e;}//控制增加函数v o i d t u::z e ng j i a(){i n t j ;f o r(i n t i =0;i<nu m;i++)//插入顶点z j d i n gd i a n(i);cout<<"请输入需要增加的弧数(最少"<<num-1<<"条且确保连通)"<<e n d l;//插入弧c i n>>j;cout<<"请输入弧的头和尾和权值"<<e nd l;f o r(i=0;i<j;i++){//cout<<"插入第"<<i+1<<"条弧"<<e n d l;z j hu b i a n();}}/***算法思想:依次递增序列求出最小路劲,首先将顶点加入到 S 当中(本程序默认为 0 号顶点),然后用d i s t数组保存到每一种顶点的最小途径长度**d i s t起始为顶点到其它顶点的权值(到本身为 0,到无弧顶点为无穷大)**1:然后每次取 v0-vk(k 属于 V-S)最小的路劲长度,取完之后将 Vk 加入 S 当中。
计算机网络原理实验三 云南大学
实验三、套接字编程序号:姓名:学号:成绩1.实验目的:两人一组,编写一个客户端、服务器程序,掌握Socket编程原理。
2.实验环境:连入局域网络的主机一台。
3.实验指导:Socket API是实现进程间通信的一种编程设施,也是一种为进程间提供底层抽象的机制。
理解socket编程模型及其原理。
4.实验分析,回答下列问题。
客户端IP:172.25.20.4服务器IP:172.25.20.194客户端源代码:#include "stdafx.h"#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <sys/types.h>#include <conio.h>#include <winsock2.h>#include <windows.h>#pragma comment(lib,"ws2_32.lib")#define PORT 3490 /* 客户机连接远程主机的端口*/#define MAXDATASIZE 100 /* 每次可以接收的最大字节*/int _tmain(int argc, _TCHAR* argv[]){WORD wVersionRequested;WSADATA wsaData;int err = 0 ,rval = 0 ;SOCKET fd;struct sockaddr_in servaddr;struct hostent* hp;char buf[1024] = "";wVersionRequested = MAKEWORD( 2, 2 );err = WSAStartup( wVersionRequested, &wsaData );if ( err != 0 )return -1;if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0){printf("Can not create socket!");exit(2);}servaddr.sin_family = AF_INET;servaddr.sin_port = htons(PORT);hp = gethostbyname("172.25.20.194");//根据服务器的网络计算//机名称得到其IP地址等信息memcpy((char*)&servaddr.sin_addr, (char*)hp->h_addr,hp->h_length); memset(servaddr.sin_zero, 0, sizeof(servaddr.sin_zero));//和服务器创建连接rval = connect(fd, (sockaddr*)&servaddr, sizeof(servaddr));if (rval < 0){//创建连接失败printf("Can not create connect!");exit(3);}else{ memset(buf, 0, 1024);printf("Please input a line to server:");scanf("%s",&buf);//向服务器发送信息rval = send(fd, buf, strlen(buf) + 1,0);if(rval < 0)printf("Write error!");}closesocket(fd);exit(5);}服务器源代码:#include "stdafx.h"#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <sys/types.h>#include<conio.h>#include<windows.h>#include<winsock2.h>#pragma comment(lib,"ws2_32.lib")#define MYPORT 3490 /*定义用户连接端口*/#define BACKLOG 10 /*多少等待连接控制*/#define SERVER_IP_ADDR "172.25.20.194" /*服务器的IP地址*/int _tmain(int argc, _TCHAR* argv[]){SOCKET sock, msgsock;int length = 0;struct sockaddr_in server;struct sockaddr tcpaddr;char buf[1024] = "";int rval= 0, len= 0, err = 0;WORD wVersionRequested;WSADATA wsaData;/*指定socket版本,否则创建socket失败,即使创建socket返回值不为-1,但是bind 时会失败*/wVersionRequested = MAKEWORD( 2, 2 );err = WSAStartup( wVersionRequested, &wsaData );if ( err != 0 )return -1;/* 建立套接字*/sock = socket(AF_INET, SOCK_STREAM, 0);if (sock < 0){perror("opening stream socket");exit(1);}/* 使用任意端口命名套接字*/server.sin_family = AF_INET;server.sin_port = htons(MYPORT);server.sin_addr.s_addr = inet_addr(SERVER_IP_ADDR);memset(server.sin_zero, 0, sizeof(server.sin_zero));//将服务器地址与socket绑定在一起rval = bind(sock, (struct sockaddr *)&server, sizeof(server));if (rval < 0){perror("binding stream socket");exit(1);}// 找出指定的端口号并打印出来length = sizeof(server);if (getsockname(sock, (struct sockaddr *)&server, &length) < 0){perror("getting socket name");exit(1);}printf("socket port #%d\n", ntohs(server.sin_port));// 开始接收连接,最大请求数为listen(sock, 5);len = sizeof(struct sockaddr);do{ msgsock = accept(sock, (struct sockaddr *)&tcpaddr, (int *)&len);if (msgsock == -1)perror("accept");else{ memset(buf, 0, sizeof(buf));if ( (rval = recv(msgsock, buf, sizeof(buf),0) < 0))perror("reading stream message");if (rval == 0)printf("-->%s\n", buf);}closesocket(msgsock);} while (TRUE);/* 因为这个程序已经有了一个无限循环,所以套接字"sock"从来不显式关闭。
西北工业大学_计算机系统基础_实验报告_第3次
西北工业大学计算机系统基础实验报告姓名班级学号实验成绩指导教师实验名称缓冲区溢出攻击实验目的:通过使目标程序跳转到我们预定的位置执行,从而加深对IA-32函数调用规则和栈帧结构的理解。
实验工具:linux、gdb调试器、反汇编工具objdump、将16进制数转化为ASCII码的工具hex2raw。
实验要求:对一个可执行程序“bufbomb”实施一系列缓冲区溢出攻击,也就是设法通过造成缓冲区溢出来改变该可执行程序的运行内存映像,继而执行一些原来程序中没有的行为,例如将给定的字节序列插入到其本不应出现的内存位置等。
实验内容:一、Smoke(让目标程序调用smoke函数)本实验利用getbuf()函数不检查读取字符串长度的漏洞破坏该程序栈帧的返回地址从而达到对主程序造成破坏的目的。
首先用objdump指令反汇编生成bufbomb的汇编语言文本文件。
可以找到getbuf函数代码如下:080491f1 <getbuf>:80491f1: 55 push %ebp80491f2: 89 e5 mov %esp,%ebp80491f4: 83 ec 38 sub $0x38,%esp80491f7: 8d 45 d8 lea -0x28(%ebp),%eax80491fa: 89 04 24 mov %eax,(%esp)80491fd: e8 08 fb ff ff call 8048d0a <Gets>8049202: b8 01 00 00 00 mov $0x1,%eax8049207: c9 leave8049208: c3 ret位于<0x80491f7> 地址处代码为预读的字符串在栈帧创建了0x28(也就是40)字节的空间。
具体位置可以通过gdb在下一行设置断点查找 %eax 的值得到。
为了覆盖被存在返回地址上的值,我们需要读入超过系统默认40字节大小的字符串。
西工大移动计算基础实验一实验报告
西北工业大学
《移动计算》实验报告
学院:软件与微电子学院
学号: 2010303258 姓名:王吴凡
专业:软件工程
实验时间: 2013.11.13 实验地点:毅字楼320 指导教师:王犇
西北工业大学
2013 年 11 月
配置页面
输入http://192.168.1.1进入配置界面,,如下图所示
)鼠标右键单击无线网络设定图标,在弹出的快捷菜单中选择
“无线网络连接属性”界面弹出(如果未弹出,请单击<高级>按扭) 所示,选中“用Windows 来配置我的无线网络配置”单选框并且单击<确定
(3)成功连接到无线网络
在无线网中做各种测试。
多台机器同时从同一个地址下载一个文件(可借助迅雷等下载工具)
下载的状态、平均速度和总下载时间。
)通过百度搜索一首歌曲或音乐,进行在线视听播放,观察并记录其缓冲情也可以自行做其他相关的实验,与有线网络环境进行对比,
在无线网络的环境下下载文件。
西北工业大学《网络性能测试》实验报告
网络性能测试实验报告学院计算机学院专业计算机科学与技术班级学号姓名实验时间实验一测试仪表基本配置及使用一、实验目的:1.掌握Sprirent TextCenter 测试软件的基本操作2.掌握测试端口的占用并配置3.掌握默认测试流量并创建4.掌握查看测试结果的基本方法二、实验环境:本实验的物理环境和逻辑结构如图8.2所示,由一台被称为路由器或第三层交换机(DUT)、一台测试仪表和一台计算机组成,其中,计算机被称为测试仪表的用户终端。
测试仪表上的以太网端口与DUT上的测试端口相连。
三、实软件验内容及步骤:使用Sprirent TextCenter图形用户界面配置管理硬件机框及板块、控制测试的进程。
使用Result Reporter软件查看测试结果,生成专业的测试报告。
实验内容1.了解网络性能测试仪表Spirent TestCenter用户界面的基本操作;2.学习使用Results Reporter软件对测试结果进行查看。
实验步骤:1.打开Spirent TestCenter软件,界面设置IP:相关参数的配置如下图:2.占用2个端口并配置,连接:3.查看2个端口的信息:4.2个端口开始进行测试:5. 查看测试结果:观察与端口有关的流量:四、实验结果:同实验步骤中的截图。
五、实验总结通过本次实验,了解了Sprirent TextCenter 测试软件的基本操作;并学习使用了测试端口的占用并配置,默认测试流量并创建,查看测试结果的基本方法。
这是第一次性能测试实验,觉得还行,实验二RFC2 889以太网转发性能测试一、实验目的:1)描述交换机转发性能的主要技术指标2)掌握RFC2889以太网转发性能测试的设计思想与基本方法3)掌握运用测试仪表向导功能进行以太网全网状转发性能测试的基本技能二、实验环境本实验的物理环境和逻辑结构如图8.40所示,由一台被称为路由器或第三层交换机(DUT)、一台测试仪表和一台计算机组成,其中,计算机被称为测试仪表的用户终端。
西工大2020年4月《计算机网络》作业机考参考答案
C.统计时分复用
D.波分多路复用
正确答案:
10.当前最流行的网络管理协议是()。
A.TCP/IP
B.SNMP
C.SMTP
D.TCP
正确答案:
11.Ipv6地址的长度是()位。
A.16
B.32
C.64
D.128
正确答案:
12.对于主机域名来说,其中()表示主机名。
A.zj
B.for
正确答案:
13.管理计算机通信的规则称为()。
A.协议
B.介质
C.服务
D.网络操作系统
正确答案:
14.网络协议主要要素为()。
A.数据格式、编码、信号电平
B.数据格式、控制信息、速度匹配
C.语法、语义、同步
D.编码、控制信息、同步
正确答案:
15.采用相位幅度调制PAM技术,可以提高数据传输速率,例如采用8种相位,每种相位取2种幅度值,可使一个码元表示的二进制数的位数为()。
D.物理层、数据链路层、应用层
正确答案:
40.ATM信元的长度是()个字节。
A.5
B.38
C.48
D.53
正确答案:
41.要把学校里行政楼和实验楼的局域网互连,可以通过()实现。
A.交换机
B.MODEM
C.中继器
D.网卡
正确答案:
42.Modem的主要功能是()。
A.模拟信号的放大
B.数字信号的编码
A.提供可靠的端—端服务,透明地传送报文
B.路由选择、拥塞控制与网络互连
C.在通信实体之间传送以帧为单位的数据
D.数据格式变换、数据加密与解密、数据压缩与恢复
西北工业大学数据结构试验报告DS03
MultSMatrix(M,N,&Q);
//初始化条件: 稀疏矩阵M的列数等于N的行数.
//操作结果:求稀疏矩阵的乘积Q=M*N.
TransposeSMatrix(M ,&Q);
//初始化条件:存在稀疏矩阵M
//操作结果:将稀疏矩阵行列互换输出。
功能模块调用关系图
4、输入第二个矩阵如上所示
5、输出运算结果
六、
#include<stdio.h>
#include<string.h>
#include<math.h>
#define MAXSIZE 12500
typedef int ElemType;
typedef struct
{
int row,col;
ElemType e;
j++;
k++;
}
else
{
if(A->data[i].col<B->data[j].col)
{
C->data[k]=A->data[i];
i++;
k++;
}
else
{
if(A->data[i].col>B->data[j].col)
{
C->data[k]=B->data[j];
j++;k++;
}
else
}
while(i<A->t)
{
C->data[k]=A->data[i];
哈工大软件学院计算机网络实验报告3
More fragment被设置为1,说明数据包进行了分片,且不为最后一个分片,同时Fragment offset为0说明该分片为第一个分片。该分片的长度为1500。
如下第一个红色条为包大小改为3500字节后主机发送的第一个ICMP Echo Request消息。原始数据包被分成了3片,IP数据报头部的Don’t fragment, More fragments, fragment offset, checksum, total length字段会变。
TCP协议采取累积确认的方式。
连接终止协议
TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送(报文段4)。
服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。
服务器关闭客户端的连接,发送一个FIN给客户端(报文段6)。
客户段发回确认,并将确认序号设置为收到序号加1(报文段7)。
计算机网络课程实验报告
实验3:典型网络协议的深入认识与分析
姓名
院系
软件学院
学号
任课教师
指导教师
实验地点
软件学院三楼机房
实验时间
实验课表现
出勤、表现得分(10)
实验报告
得分(40)
实验总分
操作结果得分(50)
实验目的:
熟悉并掌握Wireshark的基本操作;学会使用Wireshark分析各层协议的数据包格式。认识各个协议层之间的数据封装关系。
TCP:
客户端的IP地址为192.168.191.4端口号为2425。服务器的IP地址为128.119.245.12,端口号为80。Seq=0,用Flags=0x002(SYN)来标记该报文是SYN报文。Seq=0, Ack=1,服务器将收到的Seq+1,将其赋值给Ack,用Flags=0x012来标记该报文是(SYN,ACK)
西工大计算机网络实验一
实验一通过Console口配置交换机一、实验目的1.掌握交换机根本配置方法。
2.掌握根本配置命令。
二、实验容实验环境:计算机1台、交换机1台,Console 线1根,网线假设干。
实验步骤:1.连线第一次安装使用交换机时,只能通过配置口〔Console〕进展配置。
首先,关闭计算机和交换机的电源,将配置电缆的DB-9〔或DB-25〕孔式插头接到要对交换机进展配置的微机的串口上。
然后,将配置电缆的RJ-45 一端连到交换机的配置口〔Console〕上。
2.设置超级终端参数压制RJ-45 水晶头需使用专用卡线钳按下述步骤制作:(1)剥线。
用卡线钳剪线刀口将线头剪齐,再将双绞线端头伸入剥线刀口,使线头触及前挡板,然后适度握紧卡线钳同时慢慢旋转双绞线,让刀口划开双绞线的保护胶皮,取出端头从而拨下保护胶皮。
注意握钳力度不能过大,否那么会剪断芯线。
剥线的长度为大约25mm。
(2)理线。
双绞线由8 根有色导线两两绞合而成,将其整理平行,按照568B 线序橙白、橙、绿白、兰、兰白、绿、棕白、棕色平行排列,整理完毕用剪线刀口将前端修齐。
修齐后长度12mm--15mm,不宜太长或太短。
(3)插线。
一只手捏往水晶头,将水晶头有塑料卡子的一侧向下,另一只手捏平双绞线,稍稍用力将排好的线平行插入水晶头的线槽中,八条导线顶端应插入线槽顶端。
第一只引脚应该放橙白色的线,其余类推。
(4)压线。
确认所有导线都到位后,将水晶头放入卡线钳夹槽中,用力捏几下卡线钳,压紧线头即可。
重复上述方法制作双绞线的另一端,一条网线即制作完成。
(5)检测。
使用电缆检测仪检测制作的网线是否正确连通。
将制作好的网线的两端分别插入电缆测试仪的两个插口,翻开电源,如果接头制作正确,LED 会按照序号逐对闪烁。
如果有LED不亮或LED不是按序号逐对闪亮,表示此网线接头制作有问题,应重新制作。
思考题:(1)如果两个接头的线序发生同样的错误,网线还能用吗?答:网线还能使用,网线中有4对先,如果是成对的错误,例如蓝色对和绿色对交换了,一般没什么影响,如果不是成对出现错误,也可以用,但是在高速或者距离长时容易出现错误。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告实验名称--SOCKET编程一、实验目的(1)加深对TCP和UDP的理解;(2)实现两台计算机之间TCP/UDP通信。
二、实验过程原理:socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用以实现进程在网络信。
如下图所示:TCP通信原理如图:代码:服务器端:#pragma comment(lib, "WS2_32.lib")#include<Winsock2.h>#include<iostream>#include<stdlib.h>using namespace std;int main(){int i=0;WSADATA wsaData;SOCKET oldSocket,newSocket;//客户地址长度int iLen=0;//发送的数据长度int iSend=0;//接收的数据长度int ircv =0;//处世要发送给客户的信息char buf[20]="I am a server";//接收来自用户的信息char fromcli[512];//客户和服务器的SOCKET地址结构struct sockaddr_in ser,cli;if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0){cout<<"failed to load winsock"<<endl;return 0;}cout<<"server waiting"<<endl;cout<<"---------------"<<endl;//创建服务器端帧听SOCKEToldSocket=socket(AF_INET,SOCK_STREAM,0);if(oldSocket==INVALID_SOCKET){cout<<"socket() failed:"<<WSAGetLastError()<<endl;return 0;}//以下是建立服务器端的SOCKET地址结构ser.sin_family=AF_INET;ser.sin_port=htons(5050);//使用系统指定的ip地址INADDR_ANY// ser.sin_addr.s_addr=htonl(INADDR_ANY);ser.sin_addr.s_addr= inet_addr("192.168.8.58");if(bind(oldSocket,(LPSOCKADDR)&ser,sizeof(ser))==SOCKET_ERROR) {cout<<"bind() failed:"<<WSAGetLastError()<<endl;return 0;}//进入侦听状态if(listen(oldSocket,5)==SOCKET_ERROR){cout<<"listen() failed:"<<WSAGetLastError()<<endl;return 0;}//接收客户端的连接iLen=sizeof(cli);newSocket=accept(oldSocket,(struct sockaddr*)&cli,&iLen);//产生一个新的SOCKETif(newSocket==INVALID_SOCKET){cout<<"accept() failed:"<<WSAGetLastError()<<endl;//return 0;}//进入一个无限循环,等待客户发送数据while(1){i++;//服务器初始化接收缓冲区memset(fromcli,0,512);ircv=recv(newSocket,fromcli,sizeof(fromcli),0);if(ircv==SOCKET_ERROR){cout<<"rcv() failed:"<<WSAGetLastError()<<endl;break;}else if(ircv==0)break;else {cout<<"-----服务器接收的容为--------"<<fromcli<<endl;}if(strcmp(fromcli,"quit")==0)break;}closesocket(newSocket);closesocket(oldSocket);WSACleanup();}客户端:#pragma comment(lib, "WS2_32.lib")#include<winsock2.h>#include<iostream>#include<stdio.h>using namespace std;#define DATA_BUFFER 512int main(){WSADATA wsaData;SOCKET sClient;char ch;int i=0;char *Serip="192.168.8.58";//随着程序所在主机的地址改变而改变int SeriPort=5050;//从服务器接收的数据的长度int iLen;//发送的数据长度int isnd;//接收缓冲区char buf[DATA_BUFFER];//发送缓冲区char sndbuf[DATA_BUFFER];//服务器端SOCKET地址结构struct sockaddr_in ser;//接收/发送缓冲区的初始化memset(buf,0,sizeof(buf));memset(sndbuf,0,DATA_BUFFER);if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0){cout<<"failed to load winsock"<<endl;return 0;}//填写要连接的服务器地址信息ser.sin_family=AF_INET;ser.sin_port=htons(SeriPort);ser.sin_addr.s_addr=inet_addr(Serip);//建立客户端字节流式套接字sClient=socket(AF_INET,SOCK_STREAM,0);if(sClient==INVALID_SOCKET){cout<<"socket() failed :"<<WSAGetLastError()<<endl;return 0;}//请求与服务器建立连接// cout<<"set link";if(connect(sClient,(struct sockaddr *)&ser,sizeof(ser))==INVALID_SOCKET){cout<<"connect() failed: "<<WSAGetLastError()<<endl;return 0;}else{//向服务器端发送数据while(1){cout<<endl;i++;cout<<"第"<<i<<"发送"<<endl;cin>>sndbuf;isnd=send(sClient,sndbuf,sizeof(sndbuf),0);if(isnd==0)return 0;else if(isnd==SOCKET_ERROR){cout<<"send() failed:"<<WSAGetLastError()<<endl;return 0;}cout<<"-----客户端发送容为----"<<sndbuf<<endl;}}closesocket(sClient);WSACleanup();}本机上客户端与服务器端通信结果如图:在两台服务器上分别运行服务器端和客户端,结果如图:UDP通信原理如图:代码:服务器端:#include "stdafx.h"#include <winsock2.h>#include <stdio.h>#include <stdlib.h>#define buffer_length 512#pragma comment(lib, "WS2_32.lib")void main(){WSADATA wsadata;SOCKET sSocket;int ilen;int irecv;char recv_buf[buffer_length];char send_buf[buffer_length];//服务器和客户SOCKET地址结构struct sockaddr_in seradd,cliadd;if(WSAStartup(MAKEWORD(2,2),&wsadata)!=0){printf("failed to load winsocket\n");return;}sSocket=socket(AF_INET,SOCK_DGRAM,0);if(sSocket==INVALID_SOCKET){printf("socket() failed:%d\n",WSAGetLastError());return;}//初始化服务器SOCKET地址结构seradd.sin_family=AF_INET;seradd.sin_port=htons(6666);//seradd.sin_addr.s_addr=htonl(INADDR_ANY);seradd.sin_addr.s_addr= inet_addr("0.0.0.0");if(bind(sSocket,(LPSOCKADDR)&seradd,sizeof(seradd))==SOCKET_ERR OR){printf("地址绑定时出错:%d\n",WSAGetLastError());int rua;scanf("%d", &rua);return;}ilen=sizeof(cliadd);//初始化接收缓冲区memset(recv_buf,0,sizeof(recv_buf));irecv=recvfrom(sSocket,recv_buf,buffer_length,0,(structsockaddr*)&cliadd,&ilen);if(irecv==SOCKET_ERROR){printf("接收出错%d\n",WSAGetLastError());int rua;scanf("%d", &rua);return;}else if(irecv==0)return;else{printf("\n%s--",recv_buf);printf("Server received from Client ip:[%s],port:[%d]\n",inet_ntoa(cliadd.sin_addr),ntohs(cliadd.sin_port));}while(1){//在此函数中cli为传出参数irecv=recvfrom(sSocket,recv_buf,buffer_length,0,(structsockaddr*)&cliadd,&ilen);if(irecv==SOCKET_ERROR){printf("接收出错%d\n",WSAGetLastError());int rua;scanf("%d", &rua);return;}else if(irecv==0)break;else{printf("\n%s--",recv_buf);printf("Server received from Client ip:[%s],port:[%d]\n",inet_ntoa(cliadd.sin_addr),ntohs(cliadd.sin_port));}scanf("%s",send_buf);sendto(sSocket,send_buf,sizeof(send_buf),0,(structsockaddr*)&cliadd,sizeof(cliadd));}closesocket(sSocket);WSACleanup();}客户端:#include "stdafx.h"#include<winsock2.h>#include <stdio.h>#define data_buffer 1024void main(){WSADATA wsadata;SOCKET sclient;//服务器地址、端口号char * serip="192.168.8.58";int Seriport=6666;char ch[]="qita";//服务器SOCKET地址结构长度int ilen;//发送/接收数据大小int isend;int irecv;//要发送给服务器的数据char send_buf[]="hello,I am a client.";char recv_buf[data_buffer];//服务器端的SOCKET地址结构struct sockaddr_in seradd, cliadd;//初始化接收缓冲区memset(recv_buf,0,sizeof(recv_buf));//字符数组初始化memset(ch,0,sizeof(ch));if(WSAStartup(MAKEWORD(2,2),&wsadata)!=0){printf("failed to load winsock\n");return;}// 服务器SOCKET地址结构初始化seradd.sin_family=AF_INET;seradd.sin_port=htons(Seriport);seradd.sin_addr.s_addr=inet_addr(serip);cliadd.sin_family=AF_INET;cliadd.sin_port=htons(7777);cliadd.sin_addr.s_addr=inet_addr("0.0.0.0");sclient=socket(AF_INET,SOCK_DGRAM,0);if(sclient==INVALID_SOCKET){printf("build socket failed!\n");return;}if(bind(sclient,(LPSOCKADDR)&cliadd,sizeof(cliadd))==SOCKET_ERROR ){printf("地址绑定时出错:%d\n",WSAGetLastError());return;}//无连接不需要进行地址与套接字的绑定,直接发送数据即可ilen=sizeof(seradd);isend=sendto(sclient,send_buf,sizeof(send_buf),0,(struct sockaddr *)&seradd,ilen);if(isend!=0&&isend!=SOCKET_ERROR){//printf("data has been sent successfully!\n");printf("客户所发的数据为:%s, 字节数为:%d\n",send_buf,isend);}else return;while(1){scanf("%s",ch);sendto(sclient,ch,sizeof(ch),0,(structsockaddr*)&seradd,sizeof(seradd));irecv=recvfrom(sclient,recv_buf,data_buffer,0,(structsockaddr*)&seradd,&ilen);if(irecv==SOCKET_ERROR){printf("接收出错%d\n",WSAGetLastError());int rua;scanf("%d", &rua);return;}else if(irecv==0)break;else{printf("\n%s--",recv_buf);printf("Server received from Client ip:[%s],port:[%d]\n",inet_ntoa(seradd.sin_addr),ntohs(seradd.sin_port));}}closesocket(sclient);WSACleanup();}本机上客户端与服务器端通信结果如图:在两台服务器上分别运行服务器端和客户端,结果如图:三、实验中出现的问题实验中,因为对TCP和UDP中的代码不熟悉,编译时也缺少了头文件,导致在编译时一直都没有通过,最后在老师的提醒下知道了错误所在,才能编译通过。