网络程序设计课程设计论文_第1页
网络程序设计课程设计论文_第2页
网络程序设计课程设计论文_第3页
网络程序设计课程设计论文_第4页
网络程序设计课程设计论文_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

广西工学院课程设计用纸 第 页 共 页 1 广西工学院 课程设计说明书课程设计说明书 课题名称课题名称 TCP IP 协议与网络编程协议与网络编程 系 别 计算机工程系 专 业 通 信 工 程 班 级 通信 062 班 学 号 200600402048 姓 名 蔡 昭 金 指导教师 周坚和 20010 年 1 月 6 日 广西工学院课程设计用纸 第 页 共 页 2 目目 录录 一 一 摘要 3 二 目的 3 三 内容 3 四 原理 3 4 1 套接口 3 4 2 套接口编程原理 4 4 3 TCP IP 应用程序工作模型 4 4 4 Windows TCP IP 实现原理 5 五 设计过程 6 5 1 设计流程图 6 5 2 VC 网络编程及 Windows socket API 简介 6 5 3 Windows socket 机制分析 7 六 聊天室程序的设计说明 7 七 核心代码与结果分析 8 八 小结 12 九 结束语 12 十 参考文献 13 广西工学院课程设计用纸 第 页 共 页 3 一 摘要 用 VC 6 0 的 Sockets API 实现一个聊天室程序 综合运用本课程及计算机网络的相 关知识设计并实现一个简单的聊天室程序 以 Visual C 作为开发平台 通过实践复习 巩固课堂所学的理论知识 提高对所学知识的综合应用能力 关键词关键词 VC 6 0 Sockets API 聊天室程序 二 目的二 目的 综合运用本课程及计算机网络的相关知识设计并实现一个简单的聊天室程序 以 Visual C 作为开发平台 通过实践复习巩固课堂所学的理论知识 提高对所学知识的综 合应用能力 三 内容三 内容 基本基本要求要求 采用客户 服务器模式 分为客户端程序和服务器端程序 服务器采用 WINSOCK I O 模型中的任一种 支持多个客户同时在线聊天 客户端程序和服务器程序通过 网络交换聊天字符串内容 服务器窗口的列表框中显示当前在线用户 支持客户端之间的私 聊 4 原理 4 1 套接口 Socket Windows Sockets API 依靠套接口 Socket 进行通信 套接口可以看成是两个网络 应用程序进行通信时 各自通信连接中的一个端点 通信时 其中的一个网络应用程序将要 传输的一段信息写入它所在主机的 Socket 中 该 Socket 通过网络接口卡 NIC 的传输介质 将这段信息发送到另一台主机的 Socket 中 使这段信息能传送到其他程序中 如下图所示 广西工学院课程设计用纸 第 页 共 页 4 4 2 套接口编程原理 该过程可以分为以下几个阶段 以电话通信为例说明 1 电信局必须要有一个电话总机 相当于套接口通信机制中提供服务的服务器 在 Socket 中通过调用 socket 函数来开启一个服务 即创建一个提供服务的套接口 2 电信局必须给电话总机分配一个号码 如 114 即查号服务的号码是 114 以便用户通 过拨该号码得到电话服务 同时接入该电信局的用户必须知道该总机的号码 3 电信局 114 查号台下会开设一些自动服务的分机 但是它们的数量是有限的 总机开通 后就一直在监听 listen 用户的拨号 用户拨打 114 时 可能拨通 得到服务 也可能拨不 通 就会听到忙音 同样 我们在建立一个 Socket 服务时 也会调用 listen 函数来监听 客户的请求 4 对于用户来说 如果知道电信局的查号号码 在想得到查号服务时就可以拨打 114 请 求得到电信局的服务 这相当于在客户端要进行的操作 5 电信局的总机接受了某用户拨打的电话后 负责把用户与一个分机连通 而总机本身则 又 回到等待状态 等待其他客户的请求 6 服务完成后 挂上电话 线路断开 一次服务过程结束 否则该线路将一直被占用 浪 费了通信资源 在服务器和客户之间 最后也要使用 closesocket 函数关闭套接口 释放 该套接口上的有关资源 这可以由通信的任何一方或双方同时提出 4 3 TCP IP 应用程序工作模型 使用 TCP IP 协议的网络 其协议核心内容在层次结构的低三层 即网络接口层 IP 层 和传输层 而这三层的功能一般是由操作系统的内核来实现的 任何能够与 Windows Sockets 兼容实现协同工作的应用程序都被认为是具有 Windows Sockets 接口的 称这种应 用程序为 Windows Sockets 应用程序 应用程序通过调用 Windows Sockets 的 API 实现它们 之间的相互通信 Windows Sockets 又利用下层的网络通信协议功能和操作系统调用来实现 实际的通信工作 广西工学院课程设计用纸 第 页 共 页 5 如图下所示的是两台主机的进程间通过网络编程接口进行通信的原理图 上图所示的是使用 TCP IP 协议网络的典型应用方式 即客户 服务器模式 通过上图还要弄清楚一个问题 网络程序设计其实是使用系统提供的网络协议完成用户程 的功能 即在网络应用程序中使用网络协议提供的服务 而不是让用户去实现网络协议各 的功能 4 4 Windows TCP IP 实现原理 广西工学院课程设计用纸 第 页 共 页 6 5 设计过程 5 1设计流程图 并发 TCP 服务器 每客户单线程模型 5 2 VC 网络编程及 Windows Sockets API 简介 VC 对网络编程的支持有 socket 支持 WinInet 支持 MAPI 和 ISAPI 支持等 其中 创建监听流套接口 SOCKET 绑定服务器知名端口 BIND 监听 LISTEN 接受连接 ACCEPT 以 ACCEPT 返回的套接口为 参数创建服务线程 数据交互 RECV SEN D 关闭服务 套接口 数据交互 RECV SEN D 关闭服务 套接口 向服务器监听端口 发起连接 创建流套接口 与服务器套接口 进行数据交互 关闭连接 CLOSESOCKET 向服务器监听端口 发起连接 创建流套接口 与服务器套接口 进行数据交互 关闭连接 CLOSESOCKET 广西工学院课程设计用纸 第 页 共 页 7 Windows Sockets API 是 TCP IP 网络环境里 也是 Internet 上进行开发最为通用的 API 最 早美国加州大学 Berkeley 分校在 UNIX 下为 TCP IP 协 议开发了一个 API 这个 API 就是著 名的 Berkeley Socket 接口 套接字 在桌面操作系统进入 Windows 时代后 仍然继承了 Socket 方法 在 TCP IP 网络通信环境下 Socket 数据传 输是一种特殊的 I O 它也相当于 一种文件描述符 具有一个类似于打开文件的函数调用 socket 可以这样理解 Socket 实 际上是一个通信端 点 通过它 用户的 Socket 程序可以通过网络和其他的 Socket 应用程序 通信 Socket 存在于一个 通信域 为描述一般的线程如何通过 Socket 进行通信而引入的一种抽象概念 里 并且与另 一 个域的 Socket 交换数据 Socket 有三类 第一种是 SOCK STREAM 流式 提供面向连接 的可靠的通信服务 比如 telnet http 第二种是 SOCK DGRAM 数据报 提供无连接不可靠 的通信 比如 UDP 第三种是 SOCK RAW 原始 主要用于协议的开发和测试 支持通信 底层操作 比如对 IP 和 ICMP 的直接访问 5 3 Windows Socket 机制分析 5 3 1 一些基本的 Socket 系统调用 主要的系统调用包括 socket 创建 Socket bind 将创建的 Socket 与本地端口绑定 connect 与 accept 建立 Socket 连接 listen 服务器监听是否有连接请求 send 数据的可 控缓冲发送 recv 可控缓冲接收 closesocket 关闭 Socket 5 3 2 Windows Socket 的启动与终止 启动函数 WSAStartup 建立与 Windows Sockets DLL 的连接 终止函数 WSAClearup 终止 使用该 DLL 这两个函数必须成对使用 5 3 3 异步选择机制 Windows 是一个非抢占式的操作系统 而不采取 UNIX 的阻塞机制 当一个通信事件产生时 操作系统要根据设置选择是否对该事件加以处 理 WSAAsyncSelect 函数就是用来选择系 统所要处理的相应事件 当 Socket 收到设定的网络事件中的一个时 会给程序窗口一个消 息 这 个消息里会指定产生网络事件的 Socket 发生的事件类型和错误码 5 3 4 异步数据传输机制 WSAAsyncSelect 设定了 Socket 上的须响应通信事件后 每发生一个这样的事件就会产生一 个 WM SOCKET 消息传给窗口 而在窗口的回调函数中就应该添加相应的数据传输处理代 码 六 聊天室程序的设计说明 6 1 实现思想 在 Internet 上的聊天室程序一般都是以服务器提供服务端连接响应 使用者通过客户端程序 广西工学院课程设计用纸 第 页 共 页 8 登录到服务器 就可以与登录在同一服务器上的用户交谈 这是一个面向连接的通信过程 因此 程序要在 TCP IP 环境下 实现服务器端和客户端两部分程序 6 2 服务器端工作流程 服务器端通过 socket 系统调用创建一个 Socket 数组后 即设定了接受连接客户的最大数目 与指定的本地端口绑定 bind 就可以在 端口进行侦听 listen 如果有客户端连接请求 则在数组中选择一个空 Socket 将客户端地址赋给这个 Socket 然后登录成功的客户就可以 在服务器上聊天了 6 3 客户端工作流程 客户端程序相对简单 只需要建立一个 Socket 与服务器端连接 成功后通过这个 Socket 来 发送和接收数据就可以了 七 核心代码与结果分析 7 1 服务器端代码 开启服务器功能 void OnServerOpen 开启服务器功能 WSADATA wsaData int iErrorCode char chInfo 64 if WSAStartup WINSOCK VERSION MessageBox Winsock 无法初始化 AfxGetAppName MB OK MB ICONSTOP WSACleanup return Else WSACleanup if gethostname chInfo sizeof chInfo ReportWinsockErr 无法获取主机 return CString csWinsockID 服务器功能开启在端口 No csWinsockID itoa m pDoc m nServerPort chInfo 10 csWinsockID PrintString csWinsockID 在程序视图显示提示信息的函数 m pDoc m hServerSocket socket PF INET SOCK STREAM DEFAULT PROTOCOL 创建服务器端 Socket 类型为 SOCK STREAM 面向连接的通信 广西工学院课程设计用纸 第 页 共 页 9 if m pDoc m hServerSocket INVALID SOCKET ReportWinsockErr 无法创建服务器 socket return m pDoc m sockServerAddr sin family AF INET m pDoc m sockServerAddr sin addr s addr INADDR ANY m pDoc m sockServerAddr sin port htons m pDoc m nServerPort if bind m pDoc m hServerSocket LPSOCKADDR return iErrorCode WSAAsyncSelect m pDoc m hServerSocket m hWnd WM SERVER ACCEPT FD ACCEPT 设定服务器相应的网络事件为 FD ACCEPT 即连接请求 产生相应传递给窗口的消息为 WM SERVER ACCEPT if iErrorCode SOCKET ERROR ReportWinsockErr WSAAsyncSelect 设定失败 return if listen m pDoc m hServerSocket QUEUE SIZE SOCKET ERROR 开始监听客户连接请求 ReportWinsockErr 服务器 socket 监听失败 m pParentMenu EnableMenuItem ID SERVER OPEN MF ENABLED return m bServerIsOpen TRUE 监视服务器是否打开的变量 return 广西工学院课程设计用纸 第 页 共 页 10 响应客户发送聊天文字到服务器 ON MESSAGE WM CLIENT READ OnClientRead LRESULT OnClientRead WPARAM wParam LPARAM lParam int iRead int iBufferLength int iEnd int iRemainSpace char chInBuffer 1024 int i for i 0 i MAXClient 是服务器可响应连接的最大数目 if i MAXClient return 0L iBufferLength iRemainSpace sizeof chInBuffer iEnd 0 iRemainSpace iEnd iBytesRead recv m aClientSocket LPSTR chInBuffer iEnd iSpaceRemaining NO FLAGS 用可控缓冲接收函数 recv 来接收字符 iEnd iRead if iBytesRead SOCKET ERROR ReportWinsockErr recv 出错 chInBuffer iEnd if lstrlen chInBuffer 0 广西工学院课程设计用纸 第 页 共 页 11 PrintString chInBuffer 服务器端文字显示 OnServerBroadcast chInBuffer 自己编写的函数 向所有连接的客户广播这个客户的聊天文字 return 0L 对于客户断开连接 会产生一个 FD CLOSE 消息 只须相应地用 closesocket 关闭相应的 Socket 即可 这个处理比较简单 7 2 客户端代码连接到服务器 void OnSocketConnect WSADATA wsaData DWORD dwIPAddr SOCKADDR IN sockAddr if WSAStartup WINSOCK VERSION return m hSocket socket PF INET SOCK STREAM 0 创建面向连接的 socket sockAddr sin family AF INET 使用 TCP IP 协议 sockAddr sin port m iPort 客户端指定的 IP 地址 sockAddr sin addr S un S addr dwIPAddr Int nConnect connect m hSocket LPSOCKADDR 请求连接 if nConnect ReportWinsockErr 连接失败 Else MessageBox 连接成功 NULL MB OK int iErrorCode WSAAsyncSelect m hSocket m hWnd WM SOCKET READ FD READ 指定响应的事件 为服务器发送来字符 if iErrorCode SOCKET

温馨提示

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

评论

0/150

提交评论