软件开发实习讲义-基于C-S模式的软件开发(题目).ppt_第1页
软件开发实习讲义-基于C-S模式的软件开发(题目).ppt_第2页
软件开发实习讲义-基于C-S模式的软件开发(题目).ppt_第3页
软件开发实习讲义-基于C-S模式的软件开发(题目).ppt_第4页
软件开发实习讲义-基于C-S模式的软件开发(题目).ppt_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件开发实习讲义 提纲 实验题目及要求技术一 Socket网络编程 技术二 软件开发文档编写规范 技术三 统一建模语言UML 技术四 RationalRose工具与UML 技术五 开发环境 提纲 实验题目及要求技术一 Socket网络编程 技术二 软件开发文档编写规范 技术三 统一建模语言UML 技术四 RationalRose工具与UML 技术五 开发环境 实验题目及要求 实验题目 基于客户端 服务器模型的软件开发 题目概述与总体要求 题目概述 设计一个XXX网络应用程序 总体要求 按照分析 设计 编码 调试和测试的软件开发过程完成这个应用程序 提交需求分析 概要设计 详细设计文档以及UML设计文件 其中包括用例图 类图 状态图 部署图 建议客户端和服务器的设计都使用可视化界面 在界面中加入相应的功能按钮或菜单 便于操作和演示 实验题目及要求 题目具体要求 客户端根据指定的ip地址和端口号连接到服务器 客户端可以断开和服务器的连接 服务器可以选定某个已登录的客户端 断开与其的连接 客户端可以向服务器发送文字信息 服务器要能显示所有登录客户端的ip地址 端口号信息等 服务器上需要显示客户端登录和断开的提示信息 服务器显示所有登录客户端所发送的文字信息 数目 及对应的客户端信息 标识该文字信息是哪个客户端发送 服务器能够从所有接收到文字信息中 筛选从某个登录客户端发送的文字信息和数目 客户端可以显示服务器发送的文字信息及其数目 服务器可以选定某个已登录的客户端 向其发送文字信息 客户端可以向服务器发送文件 服务器显示客户端发送的文件数和当前发送的文件及对应客户端信息 1 5必须实现 6 7为加分需求 8 9选作 实验题目及要求 编程提示 开发环境和编程语言可自由选择 服务器设计一种数据结构来维护每一个客户端的信息 包括socket IP地址 端口号 收到文字信息的数目 文字信息 其中的文字信息应该设计成另一个数据结构用来存储一个个文字信息 包括文字字符串 字符串长度 如果能使用数据库存储 当然更好 本题目中要求实现的功能较多 为了更好的开发调试 可以将上一个功能实现并测试成功后 再实现其他功能 用表单显示信息 实验题目及要求 实验步骤 根据题目 撰写需求分析 概要设计 详细设计文档 根据需求 利用RationalRose工具设计UML建模图 用例图 类图 状态图 部署图 根据UML建模图在开发环境中进行软件开发 实现功能1 5 并进行调试与测试 实现功能6 7 并进行调试与测试 有时间的同学可以实现功能8 9 提交程序源代码及文档 包括设计文档和UML图 编写实验报告 实习结束后1周内由班长交齐 实验题目及要求 实验报告内容 题目要求的所有文档和设计图 设计的思路和关键数据结构 测试数据 包括对于异常情况的处理 软件使用说明书 在设计 实现和测试中发现的问题及解决方案 软件开发实习总结 实验上机要求 开放式上机 第二周的周六 周日集中验收 提纲 实验题目及要求技术一 Socket网络编程 技术二 软件开发文档编写规范 技术三 统一建模语言UML 技术四 RationalRose工具与UML 技术五 开发环境 网络编程模型 基于有连接网络程序的执行过程服务程序启动客户程序启动客户端与服务器建立连接客户端发送请求服务器处理请求 返回响应服务器断开连接 等待下一个请求 网络编程模型 基于TCP编程模型 主要内容 创建网络端点 socket连接服务器 connect绑定服务器地址和端口 bind监听端口 listen接受客户端连接 accept关闭socket close接收和发送数据 read write 网络编程模型 基于TCP编程模型 基于TCP编程模型 什么是套接字 创建网络端点 socket 1 创建网络端点intsockfd socket AF INET SOCK STREAM 0 if sockfd 1 printf can tcreatesocket n exit 1 创建网络端点 socket 创建网络端点 socket socket 套接字 网络传输的端节点支持多种协议UNIX INET IPX支持多种类型流式 STREAM 数据报 DGRAM 原始 RAW 创建网络端点 socket intsocket intfamily inttype intprotocol 功能 创建socket描述符参数 family 协议簇 AF INET AF UNIXtype 类型 SOCK STREAM SOCK DGRAM SOCK RAWprotocol 协议 默认为0返回值 0 socket描述符 1 失败 系统全局变量errno为错误代码 创建网络端点 socket socket数据结构 socket地址 socket地址Linux采用通用socket地址兼容各种协议UNIXINET 通用的地址结构 structsockaddr 地址类型AF xxx u shortsa family 协议地址 不同的协议地址格式不同 charsa data 14 socket地址 TCP IP协议的socket地址 structsockaddr in shortsin family AF INET u shortsin port 端口号 网络字节顺序 structin addrsin addr IP地址 网络字节顺序 charsin zero 8 填充字节 必须为全零 structin addr union struct u chars b1 s b2 s b3 s b4 S un b struct u shorts w1 s w2 S un w u longS addr S un socket地址 TCP IP协议的socket地址常用地址形式 字符串 127 0 0 1 地址转换函数inet aton constchar cp structin addr inp char inet ntoa structin addrin 字符串形式地址转换为网络地址形式structsockaddr inaddr inet aton 219 245 78 159 字节顺序 主机字节顺序 以16位整数0 xA130为例 little endian顺序低字节在前Intel处理器使用little endianbig endian顺序高字节在前sun工作站使用big endian顺序 字节顺序 网络字节顺序统一表示方式采用big endian顺序主机字节顺序和网络字节顺序的转换unsignedshortinthtons unsignedshortinthostshort unsignedlonginthtonl unsignedlonginthotlong unsignedshortintntohs unsignedshortintnetshort unsignedlongintntohl unsignedlongintnetlong socket地址 指定服务器地址structsockaddr insrvaddr bzero 基于TCP编程模型 绑定服务器地址和端口 intbind intsockfd structsockaddr myaddr intaddrlen 功能 绑定本地地址和端口参数 sockfd socket描述符myaddr 自己的地址addrlen 地址结构长度返回值 0 成功 1 失败 errno为错误代码 绑定服务器地址和端口 intbind intsockfd structsockaddr myaddr intaddrlen 说明服务器和客户端都可以绑定socket地址 但通常客户端不需要绑定自己的socket地址 不绑定地址时系统自动分配一个端口 并用该端口和本机ip地址填充客户端socket地址 注意INADDR ANY 绑定服务器地址和端口 绑定服务器地址和端口if bind sockfd structsockaddr 绑定服务器地址和端口 INADDR ANY绑定任何网络设备接口 适合于多IP主机对于IP地址经常变化的情况也适用 structsockaddr insrvaddr srvaddr sin addr s addr htonl INADDR ANY 基于TCP编程模型 基于TCP编程模型 如何标识一个连接 IP地址 端口号 连接服务器 intconnect intsockfd structsockaddr servaddr intaddrlen 功能 连接服务器参数 sockfd socket描述符servaddr 服务器地址addrlen 地址结构长度返回值 0 成功 1 失败 errno为错误代码 连接服务器 intconnect intsockfd structsockaddr servaddr intaddrlen 说明 对一个socket描述符不能两次使用connect函数 intsockfd socket connect sockfd connect sockfd 连接服务器 连接服务器if connect sockfd structsockaddr 基于TCP编程模型 监听端口 intlisten intsockfd intbacklog 功能 监听本地地址和端口参数 sockfd 已绑定的socket描述符backlog 以完成连接 等待接受的队列长度返回值0 成功 1 失败 errno为错误代码 监听端口 intlisten intsockfd intbacklog 说明执行listen函数后socket转换成被动socket 可以接受连接 TCP协议为每个侦听socket维护两个队列 未完成连接队列和已完成连接队列 backlog指定已完成连接队列的最大长度 监听端口 监听端口if listen sockfd BACKLOG 1 printf listenerror n exit 1 基于TCP编程模型 接受客户端连接 intaccept intsockfd structsockaddr clientaddr intaddrlen 功能 接受连接参数 sockfd socket描述符clientaddr 客户端地址addrlen 地址结构长度返回值 0 成功 返回新的socket描述符标识已接受的连接 1 失败 errno为错误代码 接受客户端连接 intaccept intsockfd structsockaddr clientaddr intaddrlen 说明accept函数返回的socket描述符是真正可以和客户端通信的socket 服务器的侦听socket只接受连接 不能用于通信accept函数在没有已完成的连接时将阻塞进程 接受客户端连接 接受客户端连接intsin size sizeof structsockaddr in intnew fd accept sockfd structsockaddr 基于TCP编程模型 接收数据 intread intfd char buf intlen 功能 从socket读取数据参数 fd socket描述符buf 接收数据缓冲区len 要读取数据大小返回值n 0andn len读出n个字节n 0读通道已关闭n 0出错或异常 errno为错误代码阻塞过程中收到中断信号 返回EINTR 读取完整数据的read all函数intread all intfd char buf intnBytes for rc read fd buf nBytes if rc 0 读出rc个字节 returnrc elseif rc 0 读通道已关闭 close fd return0 elseif errno EINTR else printf stderr Readerror close fd return 1 for 基于TCP编程模型 发送数据 intwrite intfd char buf intlen 功能 从socket读取数据参数 fd socket描述符buf 发送数据缓冲区len 要发送数据大小返回值 0 成功 1 失败 errno为错误代码 发送数据 intwrite intfd char buf intlen 说明系统发送缓冲区中空间大于参数len时返回len发送缓冲区中空间小于参数len时write函数阻塞write函数阻塞时可能因为下列原因返回发送缓冲区中空间大于参数len连接被复位 返回错误阻塞过程中收到中断信号 返回EINTRwrite all函数 intwrite all intfd char buf intnBytes for wc write sockfd buf nBytes if wc 0 returnwc elseif errno EINTR 收到中断信号else printf stderr Writeerror close sockfd return 1 for 关闭socket intclose intsockfd 功能 关闭socket参数 sockfd socket描述符返回值0 成功 1 失败 errno为错误代码说明调用close只是将对sockfd的引用减1 直到对sockfd的引用为0时才清除sockfd TCP协议将继续使用sockfd 直到所有数据发送完成 必须的头文件 include include include include include include 主要内容 UDPSocket编程原始socket编程 UDPSocket编程 UDPsocket编程模型 UDPSocket编程 intrecvfrom intsockfd void buf intlen unsignedcharflags structsocketaddr from socklen t addrlen 功能 接收UDP数据包参数 前4个参数和recv相同from 发送者socket地址 NULL表示不需要addrlen socket地址长度 from为NULL时必须置为NULL返回值 0成功 1失败 UDPSocket编程 recvfrom函数说明 UDP协议给每个UDPSOCKET设置一个接收缓冲区 每一个收到的数据报根据其端口放在不同缓冲区 recvfrom函数每次从接收缓冲区队列取回一个数据报 没有数据报时将阻塞 返回值为0表示收到长度为0的空数据报 不表示对方已结束发送 UDPSocket编程 intsendto intsockfd constvoid buf intlen unsignedcharflags structsocketaddr to inttolen 功能 发送UDP数据包参数 前4个参数和send相同to 接收者socket地址addrlen socket地址长度返回值 0成功 1失败 UDPSocket编程 sendto函数说明 每次调用sendto都必须指明接收方socket地址 UDP协议没有设置发送缓冲区 sendto将数据报拷贝到系统缓冲区后返回 通常不会阻塞允许发送空数据报 此时sendto返回值为0 UDPSocket编程 UDP服务器示例UDP服务器特点服务器不接受客户端连接 只需监听端口循环服务器 可以交替处理各个客户端数据包 不会被一个客户端独占 UDPSocket编程 udp客户端特点客户端不用建立连接 第一次调用sendto函数时 UDP协议为这个UDPsocket选择一个端口号 以后的发送和接收操作均使用这个端口号客户端可以接收来自任何主机的数据报客户端可能永远阻塞 服务器主机崩溃 UDPSocket编程 有连接的udpsocket在udpsocket上调用connect函数 但不会产生3次握手过程 只记录连接另一方的IP和端口 connect函数立即返回特点 发送UDP数据报时不用指定服务器地址只能接收来自指定服务器的数据报 UDPSocket编程 有连接的udpsocket错误返回情况数据报成功到达服务器 但服务器接收缓冲区已满 丢弃该数据报 不返回错误数据报成功到达服务器 但服务器并没有在该端口上提供服务 UDP协议丢弃数据报返回ICMP错误消息 客户端主机接收到这个ICMP消息后将以异步方式向客户端返回一个ECONNRESET错误 UDPSocket编程 有连接的udpsocket断开有连接的udpsocketudpsocket允许对一个socket多次调用connect函数 每次调用connect函数将释放原来绑定的地址 绑定到新地址利用connect函数绑定一个特殊地址可以断开之前的udp连接 structsockaddr inaddr addr sin family AF UNSPEC connect sockfd structsockaddr UDPSocket编程 使用UDPSocket的说明UDP协议不保证数据报可靠到达用超时和重发机制处理丢失的数据报用数据报序列号区分重复数据报UDP协议不保证数据报顺序到达UDP协议没有流量控制可以由程序维护一个发送缓冲区 将数据报保存在该缓冲区 直到收到确认才清除 当用户缓冲区满时不再发送数据报 原始socket编程 概述TCP和UDPSocket对TCP和UDP协议做了封装 简化了编程接口 但失去了对IP数据包操作的灵活性原始socket直接针对IP数据包编程 具有更强的灵活性 能够访问ICMP和IGMP数据包可以编写基于IP协议的高层协议 原始socket编程 创建原始socketintsocket intfamily inttype intprotocol 参数 family AF INETtype SOCK RAWprotocolIPPROTO ICMP ICMP数据包IPPROTO IGMP IGMP数据包IPPROTO IP IP数据包 原始socket编程 设置IP选项是否自动填充IP首部on 0 由协议自动填充on 1 用户程序填充 inton 1 setsockopt sockfd IPPROTO IP IP HDRINCL on sizeof on 原始socket编程 绑定本地IP地址使用bind函数绑定本地IP地址发送的IP数据包的源地址就是bind绑定的地址不调用bind函数时将以主网络接口IP地址为源地址如果设置了IP选项IP HDRINCL bind函数将不起作用 必须手工填充每个IP数据包的源地址 原始socket编程 绑定对方IP地址使用connect函数绑定对方地址发送的IP数据包目的地址就是connect绑定的对方地址用connect绑定对方地址后可以使用函数write和send发送IP数据包不调用connect函数 每次发送IP数据包必须使用sendto函数指定对方IP地址 原始socket编程 发送数据包没有调用connect函数绑定对方地址时必须用sendto或sendmsg发送数据包 调用connect绑定对方IP地址之后可以使用write send发送数据包没有设置IP HDRINCL选项时只能填充IP数据包的数据区 设置了IP HDRINCL选项后可以填充IP数据包首部和数据区 但内核总是计算和填充校验和 原始socket编程 接收数据包UDP和TCP数据包不传送到原始socket大多数ICMP数据包 echo响应 timestamp响应 mask响应 的拷贝将传递给匹配的原始socket其他类型的数据包的拷贝传递给匹配的原始socket内核不能识别的IP数据包将传送给匹配的原始socket 原始socket编程 原始socket接收过

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论