网络编程复2习题Word下载.docx
- 文档编号:19042645
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:13
- 大小:56.41KB
网络编程复2习题Word下载.docx
《网络编程复2习题Word下载.docx》由会员分享,可在线阅读,更多相关《网络编程复2习题Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
C.不可靠、面向连接和全双工
D.可靠、面向无连接和全双工
9.IEEE802标准中的介质访问控制子层的功能对应于OSI参考模型中的__B____。
A.物理层B.数据链路层C.网络层D.会话层
10.具有对帧进行接收功能的设备是____B______。
A.中继器B.网桥C.路由器D.网关
11.在基于IP协议的传输协议中,适于发送实时性要求大于正确性要求的信息的协议是___B__协议。
A.TCPB.UDPC.DNSD.FTP
12.下列关于HTTP的描述那个不正确?
C
A超文本传输协议(HypertextTransferProtocol,HTTP)是一个“请求-回应”的应用协议
B这个协议支持一套固定的方法如GET、POST、PUT、DELETE等。
一般用GET方法向服务器请求资源。
C属于一种UDP协议
D可以使用GET和POST方法向服务器发送数据
13.简单网络管理协议SNMP处于网络体系结构的哪一层?
A.互连层
B.传输层
C.应用层
D.逻辑链路控制层
14.在电子商务的分类中,消费者对消费者的电子商务称为__C_______。
A.B2BB.B2CC.C2CD.B2G
15.HTTP协议绑定的端口号是C。
A.151B.23C.80D.8081
二、填空题(共10空,每空1分,共10分)
1.不使用IP地址,可以使用Locahost来访问本机的默认Web主页。
2.电子商务的体系结构可以分为网络基础平台、安全结构、_支付体系__和业务系统4个层次。
3.socket套接字的三种类型:
_流式套接字_、_数据报套接字__和_原始套接字_。
4.HTTP协议中POST方法用来请求数据,它适用于_需要客户填写表单_的场合。
5.对Ethernet(以太网)实现实时捕捉数据包需提供两种模式:
_半双工__模式和_全双工__模式。
6.Winsock中函数调用WSASocket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED);
真,AF_INET是指_网际网区域_,SOCK_RAW是指_原始套接字_。
三、问答题(共5题,前面4题每题10分,最后1题20分)
1.请对TCP协议和UDP协议作出比较。
答:
(1)基于连接与无连接
(2)对系统资源的要求(TCP较多,UDP较少)(3)UDP程序机构较简单(4)流模式与数据报模式
2.URL的组成部分
3.ARP协议的工作过程
它的工作原理非常简单:
1.首先,每一台主机都会在ARP快取缓冲区(ARPCache)中建立一个ARP表格,用来记录IP位址和实体位址的对应关系。
这个Table的每一笔资料会根据自身的存活时间递减而最终消失,以确保资料的真实性。
2.当发送主机有一个封包要传送给目的主机的时候,并且获得目的主机的IP位址;
那发送主机会先检查自己的ARP表格中有没有该IP位址的实体位址对应。
如果有,就直接使用此位址来传送框包;
如果没有,则向网路发出一个ARPRequest广播封包,查询目的主机的实体位址。
这个封包会包含发送端的IP位址和实体位址资料。
3.这时,网路上所有的主机都会收到这个广播封包,会检查封包的IP栏位是否和自己的IP位址一致。
如果不是则忽略;
如果是则会先将发送端的实体位址和IP资料更新到自己的ARP表格去,如果已经有该IP的对应,则用新资料覆盖原来的;
然后再回应一个ARPReply封包给对方,告知发送主机关于自己的实体位址;
4.当发送端接到ARPReply之后,也会更新自己的ARP表格;
然后就可以用此纪录进行传送了。
5.如果发送端没有得到ARPReply,则宣告查询失败。
4.请简述静态网页和动态网页的工作原理
一、静态网页的工作原理如下:
A、用户在浏览器的地址栏输入要访问的地址并回车,触发这个浏览请求。
B、浏览器将请求发送到Web服务器。
C、Web服务器接受这个请求,并根据请求文件的后缀名判定是否为HTML文件。
D、Web服务器从服务器硬盘的指定位置或内存中读取正确的HTML文件然后将它发送给请求浏览器。
E、用户的浏览器解析这些HTML代码并将它显示出来。
二、动态网页的工作原理如下:
当用户请求的是一个动态网页时,服务器要做更多的工作才能把用户请求的信息发送回去,服务器一般按照以下步骤进行工作:
A、服务器端接受请求。
B、Web服务器从服务器硬盘指定的位置或内存中读取动态网页文件。
C、执行网页文件的程序代码,将含有程序代码的动态网页转化为标准的静态页面(HTML)。
D、Web服务器将生成的静态页面代码发送给请求浏览器。
5.Windows中socket通信中,服务端(Server)程序的编码步骤及主要核心代码
一、服务器端操作socket(套接字)
1)在初始化阶段调用WSAStartup()
此函数在应用程序中初始化WindowsSocketsDLL,只有此函数调用成功后,应用程序才可以再调用其他WindowsSocketsDLL中的API函数。
在程式中调用该函数的形式如下:
WSAStartup((WORD)((1<
<
8|1),(LPWSADATA)&
WSAData),其中(1<
8|1)表示我们用的是WinSocket1.1版本,WSAata用来存储系统传回的关于WinSocket的资料。
2)建立Socket
初始化WinSock的动态连接库后,需要在服务器端建立一个监听的Socket,为此可以调用Socket()函数用来建立这个监听的Socket,并定义此Socket所使用的通信协议。
此函数调用成功返回Socket对象,失败则返回INVALID_SOCKET(调用WSAGetLastError()可得知原因,所有WinSocket的函数都可以使用这个函数来获取失败的原因)。
SOCKETPASCALFARsocket(intaf,inttype,intprotocol)
参数:
af:
目前只提供PF_INET(AF_INET);
type:
Socket的类型(SOCK_STREAM、SOCK_DGRAM);
protocol:
通讯协定(如果使用者不指定则设为0);
如果要建立的是遵从TCP/IP协议的socket,第二个参数type应为SOCK_STREAM,如为UDP(数据报)的socket,应为SOCK_DGRAM。
3)绑定端口
接下来要为服务器端定义的这个监听的Socket指定一个地址及端口(Port),这样客户端才知道待会要连接哪一个地址的哪个端口,为此我们要调用bind()函数,该函数调用成功返回0,否则返回SOCKET_ERROR。
intPASCALFARbind(SOCKETs,conststructsockaddrFAR*name,intnamelen);
参数:
s:
Socket对象名;
name:
Socket的地址值,这个地址必须是执行这个程式所在机器的IP地址;
namelen:
name的长度;
如果使用者不在意地址或端口的值,那么可以设定地址为INADDR_ANY,及Port为0,WindowsSockets会自动将其设定适当之地址及Port(1024到5000之间的值)。
此后可以调用getsockname()函数来获知其被设定的值。
4)监听
当服务器端的Socket对象绑定完成之后,服务器端必须建立一个监听的队列来接收客户端的连接请求。
listen()函数使服务器端的Socket进入监听状态,并设定可以建立的最大连接数(目前最大值限制为5,最小值为1)。
该函数调用成功返回0,否则返回SOCKET_ERROR。
intPASCALFARlisten(SOCKETs,intbacklog);
需要建立监听的Socket;
backlog:
最大连接个数;
服务器端的Socket调用完listen()后,如果此时客户端调用connect()函数提出连接申请的话,Server端必须再调用accept()函数,这样服务器端和客户端才算正式完成通信程序的连接动作。
为了知道什么时候客户端提出连接要求,从而服务器端的Socket在恰当的时候调用accept()函数完成连接的建立,我们就要使用WSAAsyncSelect()函数,让系统主动来通知我们有客户端提出连接请求了。
intPASCALFARWSAAsyncSelect(SOCKETs,HWNDhWnd,unsignedintwMsg,longlEvent);
参数:
Socket对象;
hWnd:
接收消息的窗口句柄;
wMsg:
传给窗口的消息;
lEvent:
被注册的网络事件,也即是应用程序向窗口发送消息的网路事件,该值为下列值FD_READ、FD_WRITE、FD_OOB、FD_ACCEPT、FD_CONNECT、FD_CLOSE的组合,各个值的具体含意为FD_READ:
希望在套接字S收到数据时收到消息;
FD_WRITE:
希望在套接字S上可以发送数据时收到消息;
FD_ACCEPT:
希望在套接字S上收到连接请求时收到消息;
FD_CONNECT:
希望在套接字S上连接成功时收到消息;
FD_CLOSE:
希望在套接字S上连接关闭时收到消息;
FD_OOB:
希望在套接字S上收到带外数据时收到消息。
具体应用时,wMsg应是在应用程序中定义的消息名称,而消息结构中的lParam则为以上各种网络事件名称。
所以,可以在窗口处理自定义消息函数中使用以下结构来响应Socket的不同事件:
switch(lParam)
{caseFD_READ:
…
break;
caseFD_WRITE、
…
}
5)服务器端接受客户端的连接请求
当Client提出连接请求时,Server端hwnd视窗会收到WinsockStack送来我们自定义的一个消息,这时,我们可以分析lParam,然后调用相关的函数来处理此事件。
为了使服务器端接受客户端的连接请求,就要使用accept()函数,该函数新建一Socket与客户端的Socket相通,原先监听之Socket继续进入监听状态,等待他人的连接要求。
该函数调用成功返回一个新产生的Socket对象,否则返回INVALID_SOCKET。
SOCKETPASCALFARaccept(SCOKETs,structsockaddrFAR*addr,intFAR*addrlen);
s:
Socket的识别码;
addr:
存放来连接的客户端的地址;
addrlen:
addr的长度
6)结束socket连接
结束服务器和客户端的通信连接是很简单的,这一过程可以由服务器或客户机的任一端启动,只要调用closesocket()就可以了,而要关闭Server端监听状态的socket,同样也是利用此函数。
另外,与程序启动时调用WSAStartup()憨数相对应,程式结束前,需要调用WSACleanup()来通知WinsockStack释放Socket所占用的资源。
这两个函数都是调用成功返回0,否则返回SOCKET_ERROR。
intPASCALFARclosesocket(SOCKETs);
Socket的识别码;
intPASCALFARWSACleanup(void);
无
二、客户端Socket的操作
1)建立客户端的Socket
客户端应用程序首先也是调用WSAStartup()函数来与Winsock的动态连接库建立关系,然后同样调用socket()来建立一个TCP或UDPsocket(相同协定的sockets才能相通,TCP对TCP,UDP对UDP)。
与服务器端的socket不同的是,客户端的socket可以调用bind()函数,由自己来指定IP地址及port号码;
但是也可以不调用bind(),而由Winsock来自动设定IP地址及port号码。
2)提出连接申请
客户端的Socket使用connect()函数来提出与服务器端的Socket建立连接的申请,函数调用成功返回0,否则返回SOCKET_ERROR。
intPASCALFARconnect(SOCKETs,conststructsockaddrFAR*name,intnamelen);
Socket想要连接的对方地址;
name的长度
三、数据的传送
虽然基于TCP/IP连接协议(流套接字)的服务是设计客户机/服务器应用程序时的主流标准,但有些服务也是可以通过无连接协议(数据报套接字)提供的。
先介绍一下TCPsocket与UDPsocket在传送数据时的特性:
Stream(TCP)Socket提供双向、可靠、有次序、不重复的资料传送。
Datagram(UDP)Socket虽然提供双向的通信,但没有可靠、有次序、不重复的保证,所以UDP传送数据可能会收到无次序、重复的资料,甚至资料在传输过程中出现遗漏。
由于UDPSocket在传送资料时,并不保证资料能完整地送达对方,所以绝大多数应用程序都是采用TCP处理Socket,以保证资料的正确性。
一般情况下TCPSocket的数据发送和接收是调用send()及recv()这两个函数来达成,而UDPSocket则是用sendto()及recvfrom()这两个函数,这两个函数调用成功发挥发送或接收的资料的长度,否则返回SOCKET_ERROR。
intPASCALFARsend(SOCKETs,constcharFAR*buf,intlen,intflags);
Socket的识别码
buf:
存放要传送的资料的暂存区
lenbuf:
的长度
flags:
此函数被调用的方式
对于DatagramSocket而言,若是datagram的大小超过限制,则将不会送出任何资料,并会传回错误值。
对StreamSocket言,Blocking模式下,若是传送系统内的储存空间不够存放这些要传送的资料,send()将会被block住,直到资料送完为止;
如果该Socket被设定为Non-Blocking模式,那么将视目前的outputbuffer空间有多少,就送出多少资料,并不会被block住。
flags的值可设为0或MSG_DONTROUTE及MSG_OOB的组合。
intPASCALFARrecv(SOCKETs,charFAR*buf,intlen,intflags);
存放接收到的资料的暂存区
对StreamSocket言,我们可以接收到目前inputbuffer内有效的资料,但其数量不超过len的大小。
四、自定义的CMySocket类的实现代码:
根据上面的知识,我自定义了一个简单的CMySocket类,下面是我定义的该类的部分实现代码:
CMySocket:
:
CMySocket():
file:
//类的构造函数
{
WSADATAwsaD;
memset(m_LastError,0,ERR_MAXLENGTH);
//m_LastError是类内字符串变量,初始化用来存放最后错误说明的字符串;
//初始化类内sockaddr_in结构变量,前者存放客户端地址,后者对应于服务器端地址;
memset(&
m_sockaddr,0,sizeof(m_sockaddr));
m_rsockaddr,0,sizeof(m_rsockaddr));
intresult=WSAStartup((WORD)((1<
8|1),&
wsaD);
//初始化WinSocket动态连接库;
if(result!
=0)//初始化失败;
{set_LastError("
WSAStartupfailed!
"
WSAGetLastError());
return;
}
~CMySocket(){WSACleanup();
}//类的析构函数;
intCMySocket:
Create(void)
{//m_hSocket是类内Socket对象,创建一个基于TCP/IP的Socket变量,并将值赋给该变量;
if((m_hSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==INVALID_SOCKET)
{
set_LastError("
socket()failed"
returnERR_WSAERROR;
}
returnERR_SUCCESS;
///////////////////////////////////////////////
Close(void)//关闭Socket对象;
if(closesocket(m_hSocket)==SOCKET_ERROR)
{
set_LastError("
closesocket()failed"
returnERR_WSAERROR;
file:
//重置sockaddr_in结构变量;
m_sockaddr,0,sizeof(sockaddr_in));
m_rsockaddr,0,sizeof(sockaddr_in));
returnERR_SUCCESS;
/////////////////////////////////////////
Connect(char*strRemote,unsignedintiPort)//定义连接函数;
if(strlen(strRemote)==0||iPort==0)
returnERR_BADPARAM;
hostent*hostEnt=NULL;
longlIPAddress=0;
hostEnt=gethostbyname(strRemote);
//根据计算机名得到该计算机的相关内容;
if(hostEnt!
=NULL)
{
lIPAddress=((in_addr*)hostEnt->
h_addr)->
s_addr;
m_sockaddr.sin_addr.s_addr=lIPAddress;
else
m_sockaddr.sin_addr.s_addr=inet_addr(strRemote);
m_sockaddr.sin_family=AF_INET;
m_sockaddr.sin_port=htons(iPort);
if(connect(m_hSocket,(SOCKADDR*)&
m_sockaddr,sizeof(m_sockaddr))==SOCKET_ERROR)
connect()failed"
///////////////////////////////////////////////////////
Bind(char*strIP,unsignedintiPort)//绑定函数;
if(strlen(strIP)==0||iPort==0)
m_sockaddr,0,sizeof(m_sockaddr));
m_sockaddr.sin_addr.s_addr=inet_addr(strIP);
if(bind(m_hSocket,(SOCKADDR*)&
m_sockaddr,sizeof(m_sockaddr))==SOCKET_ERROR)
bind()failed"
Accept(SOCKETs)//建立连接函数,S为监听Socket对象名;
intLen=sizeof
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 编程 习题