最新网络程序设计复习题

最新网络程序设计复习题
最新网络程序设计复习题

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 )

{

相关主题
相关文档
最新文档