最新网络程序设计复习题
1.TCP/UDP在传输层;IP在网络层;MAC在数据链路层
2.NAT的实现方式有三种,即静态转换、动态转换和端口多路复用
3.端口号是16位的,范围在0~65535
4.在套接字通信中,常用套接字类型包括三类:流式套接字、数据报套接字和原始套接字
①流式套接字(其类型字段的值是SOCK_STREAM): 提供面向连接的、可靠的字节流服务,应用程序所访问的传输层协议是TCP协议。
②数据报式套接字(其类型字段的值是SOCK_DGRAM): 提供无连接的,不可靠的数据报服务,应用程序所访问的传输层协议是UDP协议。
③原始套接字(其类型字段的值是SOCK_RAW): 允许应用程序直接对较低层的协议,如IP、ICMP进行访问。
5.有状态服务器
定义:保存状态信息的服务器
优势:减少客户和服务器交换报文的大小;允许服务器快速相应请求
无状态服务器
定义:不保存任何状态信息的服务器
优势:提高协议的可靠性
6.并发服务器
定义:在一个时刻只处理一个请求的服务器
循环服务器
定义:在一个时刻可以处理多个请求的服务器
7.面向应用的网络编程方法
(1)WinInet编程
(2)基于WWW应用的网络编程
(3)面向SOA的Web Service
8.面向原始帧的网络编程方法
(1)直接网卡编程技术
(2)基于Packet Driver的网络编程方法
(3)基于NDIS的网络编程
(4)WinPcap编程
9.UDP是无连接的;TCP是面向连接的
意义:
①决定了客户和服务器交互所采用的算法;
②决定了下层系统所提供的可靠性等级;
面向连接的服务器
优点:易于编程
缺点:资源消耗问题
无连接的服务器
优点:无资源消耗问题
缺点:编程复杂
10.bind和listen函数是非阻塞的
11.B/S模型
B/S(Browse/Server)模型也叫B/S模式,它是一种基于Web的通信模型,使用HTTP通信。B/S是一种特殊的C/S模型,特殊之处就在于这种模型的客户端一般是某种流行的浏览器,例如,微软的Internet Explorer。
优点:单台计算机可以访问任何一个Web服务器,不需要针对不同的服务器分别提供专用的客户端软件。
12.客户/服务器模型
优点:(1)结构简单
(2)支持分布式、并发环境
(3)服务器集中管理资源,有利于权限控制和系统安全
(4)可扩展性好
缺点:(1)缺乏有效的安全性
(2)客户负荷过重
(3)服务器工作效率低
(4)容易造成网络阻塞
13.浏览器/服务器模型
优点:(1)具有分布性特点,可以随时随地进行查询、浏览等业务处理(2)业务扩展简单方便,通过增加网页即可增加服务器功能
(3)维护简单方便
(4)开发简单,共享性强
缺点:(1)操作时以鼠标为最基本的操作方式,无法满足快速操作的要求(2)页面动态刷新,响应速度明显降低
(3)功能弱化,难以实现传统模式下的特殊功能要求
14.字节顺序:大端顺序和小端顺序
15.Linux中提供的基本I/O功能
16.会聚点问题的解决方案
1)要求下层通信协议在请求报文到达后自动创建运行程序
——底层通讯程序太复杂!2)要求在任何一对进行通信的应用进程中,有一方必须在启动执行后(无限期)等待对方与其联系。
——客户-服务器模型的解决方案
17.客户端通信过程:
①socket初始化;
②创建套接字,指定使用TCP(可靠的传输服务)进行通信;
③指定服务器地址和通信端口;
④向服务器发送连接请求;
⑤进行数据传输;
⑥关闭套接字;
⑦结束对windows sockets dll的使用。
18.服务器通信过程:
①socket初始化;
②创建套接字,指定使用TCP(可靠的传输服务)进行通信;
③指定本地地址和通信端口;
④等待客户端的连接请求;
⑤进行数据传输;
⑥关闭套接字;
⑦结束对windows sockets dll的使用。
19.接收函数的调用结果有很多种
完整接收流数据
int iResult, recvbuflen;
char recvbuf [MSGSZ];
do {
iResult = recv(ConnectSocket, recvbuf, recvbuflen, 0);
if ( iResult > 0 )
printf("Bytes received: %d\n", iResult);
else {
if ( iResult == 0 )
printf("Connection closed\n");
else
printf("recv failed with error: %d\n", WSAGetLastError());
}
} while( iResult > 0 );
20.接收定长数据
int recvn(SOCKET s, char * recvbuf, unsigned int fixedlen)
{
int iResult; //存储单次recv操作的返回值
int cnt; //用于统计相对于固定长度,剩余多少字节尚未接收
cnt = fixedlen;
while ( cnt > 0 ) {
iResult = recv(s, recvbuf, cnt, 0);
if ( iResult < 0 ){
//数据接收出现错误,返回失败
printf("接收发生错误: %d\n", WSAGetLastError());
return -1;
}
if ( iResult == 0 ){
//对方关闭连接,返回已接收到的小于fixedlen的字节数
printf("连接关闭\n");
return fixedlen - cnt;
}
//printf("接收到的字节数: %d\n", iResult);
//接收缓存指针向后移动
recvbuf +=iResult;
//更新cnt值
cnt -=iResult;
}
return fixedlen;
}
21.接收变长数据
int recvvl(SOCKET s, char * recvbuf, unsigned int recvbuflen)
{
int iResult;//存储单次recv操作的返回值
unsigned int reclen; //用于存储报文头部存储的长度信息 //获取接收报文长度信息
iResult = recvn(s, ( char * )&reclen, sizeof( unsigned int ));
if ( iResult !=sizeof ( unsigned int )
{
//如果长度字段在接收时没有返回一个整型数据就返回(连接关闭)或-1(发生错误)
if ( iResult == -1 )
{