logo资料库

武汉理工大学TCPIP及网络编程复习重点.doc

第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
资料共10页,剩余部分请下载后查看
复习重点: TCP/IP 基础: 分层模型、IP 地址特点、应用层主要协议; 网络编程基础:预留常用端口号、TCP 与 UDP 的主要特点及各自编程主要步骤、应用层 的唯一标识、IO 模型、MFC 对 Windows Sockets 封装类、WinInet API 的封装类功能; ARP:主要步骤、主要概念、主要函数及功能 客户机/服务器模式编程:客户端/服务器端编程主要步骤、主要概念 FTP:主要交互命令、请求流程 HTTP:客户端请求主要命令、http 请求流程 电子邮件:客户端主要命令、标准信头、发生接收主要步骤 编程分析:tcp 编程客户机/服务器基本编程、udp 基本编程。 TCP 和 UDP 特点及各自编程步骤 TCP 特点: (1) TCP 是面向连接的运输层协议。 (2) 每一条 TCP 连接只能有两个端点(endpoint),每一条 TCP 连接只能是点对点的(一对 一)。 (3) TCP 提供可靠交付的服务。 (4) TCP 提供全双工通信。 (5) 面向字节流。 (6) TCP 不保证最小传输速率,TCP 不允许发送进程以设想的速率发送数据 (7) TCP 不提供任何延时保障 UDP 特点: (1) UDP 是无连接的,即发送数据之前不需要建立连接。 (2) UDP 使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制。 (3) UDP 是面向报文的。UDP 没有拥塞控制,很适合多媒体通信的要求。 (4) UDP 支持一对一、一对多、多对一和多对多的交互通信。 (5) UDP 的首部开销小,只有 8 个字节。 (6) UDP 也不提供延时保障 编程步骤: TCP 编程
UDP 编程 2.客户/服务器端编程主要步骤: 3.电子邮件 STMP 指令 QUIT:终止会话 HELP:请求 SMTP 命令的帮助 NOOP:空操作 VRFY:验证地址(不要求一定启用) EXPN:扩展一个别名 HELO:客户机问候服务器 MAIL:指定邮件的发送者 RCPT:指定邮件的接收者 DATA:发送邮件的数据状态 REST:复位会话状态 SEND:指定要发送到用户终端的邮件的发送者 SOML:Send 或 Mail SAML:Send 和 Mail
TURN:交换客户机/服务器角色 标准信头: 信头的一般格式 信头由若干信头字段(header field)组成。 所有的信头字段包括:字段名,可选的空格,冒号“:”,可选的注解空格和可选的字段体,最 后以回车换行符(CRLF)终止。即 信头字段 = 字段名:字段体 结构化字段和非结构化字段 信头字段大体可以分为结构化字段和非结构化字段两种。 结构化字段有特定的格式,由语法分析程序检测。 非结构化的字段含有任意的数据,没有固定格式。 信头字段的元素 尽管 Email 信件的总体结构非常简单,但一些信头字段的结构是很复杂的。下面介绍一些大多 数字段共有的元素。 (1)空白符 (2)注解 (3)字段折叠 (4)字段大小写 信头中必须要有的字段 在创建信件时,必须使用 Date 或 Resent-Date 字段指定创建信件的日期,必须使用 From 字段 指定创建该信件的人或程序的信箱,必须至少使用 TO、CC 或 Bcc 中的一个,或者与它们等效 的 Resent-TO,Resent-CC,Resent-Bcc 中的一个,来指定接收信件的人。 除了这些创建信件时要求的信头以外,每个处理信件的邮件传输代理(MTA)必须在它处理 的信件头部开始处加一个 Received 字段,就好像打了一个中转邮戳,这就是我们通常在许多信 件的开始看到许多个 Received 字段的原因。 发送电子邮件的一般步骤 1. 打开邮件发送的对话; 2. 指定发送者的邮箱; 3. 指定接收者的邮箱; 4. 发送邮件的内容; 5. 结束邮件发送对话。 接收电子邮件的一般步骤 首先利用 Winsock 连接上 POP3 服务器,然后: 1.使用 USER 命令发送用户信箱名。 2.使用 PASS 命令发送信箱密码。如果密码和信箱不匹配,必须从上一步骤重新开始。 3.对信箱邮件进行操作。 此阶段称为事务状态,在这一个阶段,有许多 POP3 命令可以使用,大体分为下面几类: (1)取得信箱及邮件状态的命令 Stat:取得信箱大小信息 List:取得邮件大小信息 Uidl:取得邮件的唯一标识符。 (2)取得邮件内容的命令 Retr:从服务器取回邮件 TOP: 取邮件信头和信体的前 N 行。
(3)对邮件进行操作的命令 Dele:为邮件做删除标记。 Rset:复位 POP 会话。 4.接收邮件完毕,发送 QUIT 命令,结束 POP3 对话。 4.预留的常用端口号。 TCP 6 POP3 110 UDP 17 ONS 58 FTP 21 SNMP 161 SMTP 25 RPC 135 5.应用层的唯一标识? 套接字(IP 地址+端口号) TFTP 69 HTTP 80 6.IO 模型 ①Select(选择) ②WSAAsyncSelect(异步选择) ③WSAEventSelect(事件选择) ④Overlapped(重叠) ⑤Completion port(完成端口) 注:Windows 套接字在两种模式下执行 I/O 操作,及阻塞模式和非阻塞模式。 7.MFC 对 Windows Socket 封装的类有哪些? CAsyncSocket 类和 CSocket 类 8.WinInet API 的封装类功能。 ①使用 HTTP 协议将 HTML 页面从服务器下载到浏览器中。 ②发送 FTP 请求进行上传或下载文件,或获取目录列表。 ③使用 Gopher 菜单系统获取网络资源。 4 使用 Gopher、FTP、HTTP 协议建立于服务器的 连接,向服务器发送请求以及断开与服务 器之间的连接。 9.HTTP:客户端请求的主要命令和 HTTP 的请求流程 9.1 客户端请求的主要命令 ①GET:请求获取 Request-URI 所标识的资源。 ②POST:在 Request-URI 所标识的资源后附加新的数据。 ③HEAD:请求获取由 Request-URI 所标识的资源的响应消息报头。 ④PUT:请求服务器存储一个资源,并用 Request-URI 作为其标识。 ⑤Delete:请求服务器删除 Request-URI 所标识的资源。 ⑥TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断。 ⑦CONNECT:保留将来使用。 ⑧OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求。 9.2HTTP 的请求流程 HTTP 协议属于 TCP/IP 网络模型中的应用层的协议,两个应用程序(这里指浏览器和服务器) 之间要相互通信,首先得建立 TCP 连接,然后浏览器才能向服务器发送请求信息。而服务器在
收到请求信息后,将返回相应的应答信息给浏览器。浏览器接收到来自服务器的应答信息后, 对这些数据进行解释执行。 #include #include #include #pragma comment(lib,"WS2_32.lib") int main() { WSADATA data; WORD w=MAKEWORD(2,0); char sztext[]="欢迎你\r\n"; ::WSAStartup(w,&data); SOCKET s; s=::socket(AF_INET,SOCK_DGRAM,0); sockaddr_in addr,addr2; int n=sizeof(addr2); char buff[11]={0}; addr.sin_family=AF_INET; addr.sin_port=htons(75); addr.sin_addr.S_un.S_addr=INADDR_ANY; ::bind(s,(sockaddr*)&addr,sizeof(addr)); printf("UDP 服务器已经启动\r\n"); while(1) { if(::recvfrom(s,buff,11,0,(sockaddr*)&addr2,&n)!=0) { printf("%s 已经连接上\r\n",inet_ntoa(addr2.sin_addr)); printf("%s\r\n",buff); ::sendto(s,sztext,sizeof(sztext),0,(sockaddr*)&addr2,n); break; //如果有输入则关闭程序 //正常结束程序 } else { } ::Sleep(100); } } ::closesocket(s); ::WSACleanup(); if(getchar()) { return 0; } #include #include #include
#pragma comment(lib,"WS2_32.lib") int main() { WSADATA data; WORD w=MAKEWORD(2,0); char sztext[]="服务器,你好!\r\n"; ::WSAStartup(w,&data); SOCKET s; s=::socket(AF_INET,SOCK_DGRAM,0); sockaddr_in addr,addr2; int n=sizeof(addr2); char buff[10]={0}; addr.sin_family=AF_INET; addr.sin_port=htons(75); addr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1"); printf("UDP 客户端已经启动\r\n"); if(::sendto(s,sztext,sizeof(sztext),0,(sockaddr*)&addr,n)!=0) { ::recvfrom(s,buff,10,0,(sockaddr*)&addr2,&n); printf("服务器说:%s\r\n",buff); ::closesocket(s); ::WSACleanup(); } if(getchar()) { return 0; //如果有输入则关闭程序 //正常结束程序 } else { } } ::Sleep(100);
试卷答案 1. 流套接字提供:双向的,有序的,无重复的并且无记录的数据流服务,它适合于处理大 量数据传输。 2. 流套接字编程模型主要步骤有: 1 服务进程创建套接字 2 将本地地址绑定在所创建的套接字上以便在网络上标识该套接字 3 将套接字置入监听模式并准备接受连接请求 4 客户进程调用 socket 函数创建客户端套接字 5 客户向服务器发出连接请求 3. WinInet 是对 WinInet API 的封装,具有以下功能: ①使用 HTTP 协议将 HTML 页面从服务器下载到浏览器中 ②发送 FTP 请求进行上传或下载文件,或获取目录列表 ③使用 Gopher 菜单系统获取网络资源 ④使用 Gopher,FTP,HTTP 协议建立于服务器的连接,向服务器发送请求以及断开与服务 器之间的连接 4.MFC 提供了两个 Windows Sockets 封装类,即:CAsyncSocket 类和 CSocket 类 . 5. 信头中必须要有的字段 在创建信件时,必须使用 Date 或 Resent-Date 字段指定创建信件的日期,必须使用 From 字段 指定创建该信件的人或程序的信箱,必须至少使用 TO、CC 或 Bcc 中的一个,或者与它们等效的 Resent-TO,Resent-CC,Resent-Bcc 中的一个,来指定接收信件的人。 发送电子邮件的一般步骤 6. 打开邮件发送的对话; 7. 指定发送者的邮箱; 8. 指定接收者的邮箱; 9. 发送邮件的内容; 10. 结束邮件发送对话。 接收电子邮件的一般步骤 首先利用 Winsock 连接上 POP3 服务器,然后: 1.使用 USER 命令发送用户信箱名。 2.使用 PASS 命令发送信箱密码。如果密码和信箱不匹配,必须从上一步骤重新开始。 3.对信箱邮件进行操作。 客户端请求的主要命令 ①GET:请求获取 Request-URI 所标识的资源。 ②POST:在 Request-URI 所标识的资源后附加新的数据。 ③HEAD:请求获取由 Request-URI 所标识的资源的响应消息报头。
④PUT:请求服务器存储一个资源,并用 Request-URI 作为其标识。 ⑤Delete:请求服务器删除 Request-URI 所标识的资源。 ⑥TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断。 ⑦CONNECT:保留将来使用。 ⑧OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求。 HTTP 的请求流程 HTTP 协议属于 TCP/IP 网络模型中的应用层的协议,两个应用程序(这里指浏览器和服务器) 之间要相互通信,首先得建立 TCP 连接,然后浏览器才能向服务器发送请求信息。而服务器在 收到请求信息后,将返回相应的应答信息给浏览器。浏览器接收到来自服务器的应答信息后, 对这些数据进行解释执行。 Windows Socket 编程 一·设计一个基本网络服务器的步骤 1、初始化 Windows Socket 2、创建一个监听的 Socket 3、设置服务器地址信息,并将监听端口绑定到这个地址上 4、开始监听 5、接受客户端连接 6、和客户端通信 7、结束服务并清理 Windows Socket 和相关数据,或者返回第 4 步 winsock 启动与终止 由于 winsock 的服务是以动态链接库 winsock.dll 的形式实现的,所以必须先调用 WSAStartup 函 数对 winsock 进行初始化, WSAStartup 函数的原型如下: int WSAStartup(WORD wVersionRequested,LPWSADATA lpWSAData); wVersionRequested 用于指定准备加载的动态链接库版本,通常高位字节指定的副版本,低位字 节指定主版本,然后用 MAKEWORD(X,Y)获得 wVersionRequested 的正确值,lpWSAData 是指向 WSADATA 的指针,该结构包含了加载版本库的信息,该结构如下: typedef struct WSAData { WORD WORD char char unsigned short unsigned short char FAR * wVersion;//打算使用的 winsock 的版本 wHighVersion;//现在使用的 winsock 的最高版本 szDescription[WSADESCRIPTION_LEN+1]; szSystemStatus[WSASYS_STATUS_LEN+1]; iMaxSockets;//可同时打开的套接字数,一般不用 iMaxUdpDg;//数据报的最大长度,一般不用 lpVendorInfo;//为 winsock 实施方案有关的指定厂商信息预留的,任何 一个 win32 平台都不使用这个字段 } WSADATA, *LPWSADATA; 在关闭套接字 winsock 后,使用 WSAClenup 终止对 winsock.dll 的使用,并释放资源 WSAClenup 函数原型如下: int WSACleanup(void); /*************************************************/ ,
分享到:
收藏