1、 网络程序设计网络程序设计 课程设计课程设计报告报告 目录 I 目录 第 1 章 课程设计目的、要求 1 1.1 课程设计目的 1 1.2 实验要求 1 1.3 实验内容 1 1.4 小组分工 1 第 2 章 课程设计分析及内容 2 2.1 所用知识点 2 2.1.1 套接字函数. 2 2.1.2 守护进程. 2 2.1.3 I/O 复用 2 2.1.4 并发服务器 3 第 3 章 课程设计的实现 4 3.1 程序运行步骤. 4 3.2 客户端主要函数. 5 3.2.1 socket()函数 5 3.2.2 connect()函数 5 3.3 服务端函数 6 3.3.1 send 函数和 re
2、cv函数 . 6 3.3.2 close()函数 6 3.3.3 select 函数. 7 3.4 创建守护进程. 7 心得体会 8 附录一 系统界面 9 附录二 程序代码 10 第 1 章 1 第第 1 章章 课程设计目的、要求课程设计目的、要求 1.1 课程设计课程设计目的目的 1.熟练掌握所学到的网络套接字函数。 2.掌握 UDP 和 TCP 编程关键函数。 3.掌握多进程或多线程编程。 4.掌握使用 select 实现 I/O 复用。 5.掌握守护进程的编写。 1.2 实验要求实验要求 1.认真阅读和掌握本实验的相关的知识点。 2.上机编写并运行程序。 1.3 实验内容实验内容 实现一
3、个并发、IO 复用的守护进程时间服务器,要求当客户端向服务器发送 “whats time?”字符串时,服务器回应当时的系统时间字符串。 1.4 小组分工小组分工 成员 负责内容 梁小龙 任务书、课程设计资料查询、代码测试 杨国浩 服务器端程序 I/O 复用模块分析与设计 杨天 客户端 clinet 整体程序、课程设计报告 豆全胜 服务器端守护进程模块与主函数模块 第 2 章 2 第第 2 章章 课程设计课程设计分析及分析及内容内容 2.1 所用知识点所用知识点 2.1.1 套接字套接字函数函数 客户端所用函数:socket()函数、connect()函数、send()函数、recv()函数,c
4、lose() 函数。 服务器端所用函数: bind()函数、 socket()函数、 listen()函数、 accept()函数、 send() 函数、accept()函数、recv()函数、close()函数。 2.1.2 守护进程守护进程 守护进程,也就是通常说的 Daemon 进程,是 Linux 中的后台服务进程。它 是一个生存期较长的进程, 通常独立于控制终端并且周期性地执行某种任务或等 待处理某些发生的事件。守护进程常常在系统引导装入时启动,在系统关闭时终 止。Linux系统有很多守护进程,大多数服务都是通过守护进程实现的。 每一个从此终端开始运行的进程都会依附于这个终端,这个终
5、端就称为这些 进程的控制终端,当控制终端被关闭时,相应的进程都会自动关闭。但是守护进 程却能够突破这种限制,它从被执行开始运转,直到整个系统关闭时才退出。如 果想让某个进程不因为用户或终端或其他地变化而受到影响, 那么就必须把这个 进程变成一个守护进程。 2.1.3 I/O 复用复用 I/O 复用调用 select 或 poll,并在该函数上阻塞,等待数据报套接口可读;当 select 返回可读条件时,调用 recvfrom将数据报拷贝到应用程序缓冲区中。 主要应用: (1)客户程序需要同时处理交互式的输入和服务器之间的网络连接。 (2)客户端需要对多个网络连接作出反应。 第 2 章 3 (3
6、)TCP 服务器需要同时处理多个处于监听状态和多个连接状态的套接字。 (4)服务器需要处理多个网络协议的套接字。 (5)服务器需要同时处理不同的网络服务和协议。 2.1.4 并发服务器并发服务器 不同于顺序服务器,并发服务器就要能在一个时间为多个客户端提供服务。 例如,一个聊天服务器可能服务一个特定的客户端数小时在停止为这个客户 端服务之前服务器不能等待, 除非是在等待一下个客户端到来之前的间隙才能 等待。 第 3 章 4 第第 3 章章 课程设计的实现课程设计的实现 3.1 程序运行步骤程序运行步骤 对于服务器端而言, 由于它是一个守护进程所以只要做到接收信息并且存储 在一个数组中即可而不必在前台显示,对于客户端必须有信息的发送和接收。服 务器端必须对来自客户端的信息加以判断。 如果接收到的字符串与“whats_time?”字符串行匹配那么则返回给客户端 一个系统的时间信息,否则返回给客户端“Input error”的字符串。 如下图所示: 图 3-1 连接流程图 第 3 章 5 3.2 客户端客户端主要函数主要函数 3.2.1 socket()函数函数 s